Страница 1 из 1

Как определять с помощью чего было изменено свойство объекта?

Добавлено: Сб июн 24, 2023 6:46 pm
Yashalta
Подскажите,
У меня есть микроконтроллер на котором реализован веб. интерфейс контроля выключателей и розеток. Так же на нем реализован MQTT клиент.
Вопрос: Как нужно реализовать логику на стороне MajorDomo что бы правильно обрабатывать MQTT сообщения?
Я написал метод и привязал его к свойству объекта для MQTT. Но, он мне не нравиться т.к. не могу различать изменения кнопок сделанные от прикосновения на планшете и изменения сделанные микроконтроллером по таймеру!?
Метод срабатывает каждый раз когда произошло изменение свойства объекта! И согласно моему коду на микроконтроллер каждый раз отправляется MQTT publish т.к. произошло изменение свойства! Даже если сам микроконтроллер сделал это изменение! Как по мне - это не правильно!

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

//$str = "12-0";
$str = $this->getProperty('MQTTmsg');
//echo $str . "<br>";
$pairs = explode(";", trim($str));

$message = '';
$mqttmsg = '';
$output = '';

foreach ($pairs as $pair) {
  $key_value = explode("-", trim($pair));
  $key = $key_value[0];
  $value = $key_value[1];

  switch ($value) {
    case 0:
      $message = $value;
      //echo $message;
  	  if($key == 6){
  	  $this->setProperty('Switch_green', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 12){
  	  $this->setProperty('Switch_blue', $message);
      $mqttmsg = $key . ":". $value;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 18){
  	  $this->setProperty('Switch_red', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      break;
    case 1:
      $message = $value;
  	  //echo $message;
  	  if($key == 6){
  	  $this->setProperty('Switch_green', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 12){
  	  $this->setProperty('Switch_blue', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 18){
  	  $this->setProperty('Switch_red', $message);
      $mqttmsg = $key . ":". $value;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      break;
    case 2:
 	  $message = $value;
  	  if($key == 6){
  	  $this->setProperty('Switch_green', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 12){
  	  $this->setProperty('Switch_blue', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      if($key == 18){
  	  $this->setProperty('Switch_red', $message);
      $mqttmsg = $key . ":". $value;
      echo $mqttmsg;
      //$output = shell_exec("mosquitto_pub -h 192.168.18.100 -p 1883 -t Zagotovka/info -m $mqttmsg");
      }
      break;
  }
}

Re: Как определять с помощью чего было изменено свойство объекта?

Добавлено: Вс июн 25, 2023 1:01 pm
xor
Yashalta писал(а):
Сб июн 24, 2023 6:46 pm
Подскажите,
У меня есть микроконтроллер на котором реализован веб. интерфейс контроля выключателей и розеток. Так же на нем реализован MQTT клиент.
Вопрос: Как нужно реализовать логику на стороне MajorDomo что бы правильно обрабатывать MQTT сообщения?
Я написал метод и привязал его к свойству объекта для MQTT. Но, он мне не нравиться т.к. не могу различать изменения кнопок сделанные от прикосновения на планшете и изменения сделанные микроконтроллером по таймеру!?
Метод срабатывает каждый раз когда произошло изменение свойства объекта! И согласно моему коду на микроконтроллер каждый раз отправляется MQTT publish т.к. произошло изменение свойства! Даже если сам микроконтроллер сделал это изменение! Как по мне - это не правильно!
так стройте логику с учётом источника - вы же имеете информацию о нажатии кнопки на планшете?
если нельзя на стороне контроллера разделить, например, топики от таймера и от внешней команды

Re: Как определять с помощью чего было изменено свойство объекта?

Добавлено: Вс июн 25, 2023 1:01 pm
xor
Yashalta писал(а):
Сб июн 24, 2023 6:46 pm
Подскажите,
У меня есть микроконтроллер на котором реализован веб. интерфейс контроля выключателей и розеток. Так же на нем реализован MQTT клиент.
Вопрос: Как нужно реализовать логику на стороне MajorDomo что бы правильно обрабатывать MQTT сообщения?
Я написал метод и привязал его к свойству объекта для MQTT. Но, он мне не нравиться т.к. не могу различать изменения кнопок сделанные от прикосновения на планшете и изменения сделанные микроконтроллером по таймеру!?
Метод срабатывает каждый раз когда произошло изменение свойства объекта! И согласно моему коду на микроконтроллер каждый раз отправляется MQTT publish т.к. произошло изменение свойства! Даже если сам микроконтроллер сделал это изменение! Как по мне - это не правильно!
так стройте логику с учётом источника - вы же имеете информацию о нажатии кнопки на планшете?
если нельзя на стороне контроллера разделить, например, топики от таймера и от внешней команды

Re: Как определять с помощью чего было изменено свойство объекта?

Добавлено: Вс июн 25, 2023 1:01 pm
xor
Yashalta писал(а):
Сб июн 24, 2023 6:46 pm
Подскажите,
У меня есть микроконтроллер на котором реализован веб. интерфейс контроля выключателей и розеток. Так же на нем реализован MQTT клиент.
Вопрос: Как нужно реализовать логику на стороне MajorDomo что бы правильно обрабатывать MQTT сообщения?
Я написал метод и привязал его к свойству объекта для MQTT. Но, он мне не нравиться т.к. не могу различать изменения кнопок сделанные от прикосновения на планшете и изменения сделанные микроконтроллером по таймеру!?
Метод срабатывает каждый раз когда произошло изменение свойства объекта! И согласно моему коду на микроконтроллер каждый раз отправляется MQTT publish т.к. произошло изменение свойства! Даже если сам микроконтроллер сделал это изменение! Как по мне - это не правильно!
так стройте логику с учётом источника - вы же имеете информацию о нажатии кнопки на планшете?
если нельзя на стороне контроллера разделить, например, топики от таймера и от внешней команды