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

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

Модератор: immortal

Ответить
Yashalta
Сообщения: 315
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 160 раз
Поблагодарили: 29 раз

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

Сообщение Yashalta » Сб июн 24, 2023 6:46 pm

Подскажите,
У меня есть микроконтроллер на котором реализован веб. интерфейс контроля выключателей и розеток. Так же на нем реализован 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;
  }
}
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Вс июн 25, 2023 1:01 pm

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

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

Сообщение xor » Вс июн 25, 2023 1:01 pm

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

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

Сообщение xor » Вс июн 25, 2023 1:01 pm

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