[Модуль] Telegram (telegram)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Kvantos
Сообщения: 218
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 20 раз
Поблагодарили: 34 раза

Re: [Модуль] Telegram (telegram)

Сообщение Kvantos » Ср май 08, 2019 11:56 am

tarasfrompir писал(а):
Ср май 08, 2019 11:31 am
а ты можешь давать ответ на вопрос из телеграмма - используя фукнцию sayTo('проба',5,'telegram1')?
если нет терминала, то естественно не могу, поэтому и прошу рассказать как у тебя сделано )
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
Аватара пользователя
Kvantos
Сообщения: 218
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 20 раз
Поблагодарили: 34 раза

Re: [Модуль] Telegram (telegram)

Сообщение Kvantos » Ср май 08, 2019 11:58 am

viktor6 писал(а):
Вт май 07, 2019 10:41 pm
Что-то не получилось у меня из ПУ
Отображаются только некоторые комнаты и при нажатии на их не чего не происходит.
2Eraser
аналогично, при этом импортированы и команды и события, в классе room есть комнаты

Upd: Sergey Dr на телеге подсказал, что должны быть в классе room для всех объектов заполнено поле "Описание"
потому что $room_text= getObject($room['TITLE'])->description;
так заработало...
п.с. я не знаю на форуме ника Sergey Dr, чтобы сказать "спасибо"
Вложения
Snap 2019-05-08 at 12.11.10.png
Snap 2019-05-08 at 12.11.10.png (56.92 КБ) 432 просмотра
Snap 2019-05-08 at 12.00.05.png
Snap 2019-05-08 at 12.00.05.png (102.99 КБ) 435 просмотров
Snap 2019-05-08 at 11.58.48.png
Snap 2019-05-08 at 11.58.48.png (12.81 КБ) 437 просмотров
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
tarasfrompir
Сообщения: 1955
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 93 раза
Поблагодарили: 374 раза

Re: [Модуль] Telegram (telegram)

Сообщение tarasfrompir » Ср май 08, 2019 12:29 pm

Kvantos писал(а):
Ср май 08, 2019 11:56 am
tarasfrompir писал(а):
Ср май 08, 2019 11:31 am
а ты можешь давать ответ на вопрос из телеграмма - используя фукнцию sayTo('проба',5,'telegram1')?
если нет терминала, то естественно не могу, поэтому и прошу рассказать как у тебя сделано )
Переделал терминалы по своему образу - счас докатываю их. двое пообещали потестировать, но пока ни ответа не привета. Поэтому рассказать то могу - но обкатку еще не прошло все.... Если хочеш то пиши в лычку или в телегу... :oops: :oops:
Спасибо нам ПОМОЖЕТ..!
tarasfrompir
Сообщения: 1955
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 93 раза
Поблагодарили: 374 раза

Re: [Модуль] Telegram (telegram)

Сообщение tarasfrompir » Ср май 08, 2019 12:32 pm

Для автора - постоянно сыпет - PHP Warning: count(): Parameter must be an array or an object that imp
ountable in E:\xampp\htdocs\modules\telegram\Telegram.php on line 1756 в цикле
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
webms
Сообщения: 393
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 147 раз
Поблагодарили: 75 раз

Re: [Модуль] Telegram (telegram)

Сообщение webms » Ср май 08, 2019 5:29 pm

webms писал(а):
Вт май 07, 2019 5:25 pm
У меня в вкладке События есть меню с строкой

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

$option = array( array($em_l." Свет", $em_c." Камеры"));
а в Командах запись "Камеры"

когда нажимаю кнопку то пишет что неизвестная команда, если убрать иконку $em_c то все ок

а как вызвать команду Камеры с иконкой?

пс: надеюсь вы меня поняли)
вдруг не заметили сообщение)
Аватара пользователя
Eraser
Сообщения: 780
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 582 раза
Контактная информация:

Re: [Модуль] Telegram (telegram)

Сообщение Eraser » Ср май 08, 2019 5:32 pm

webms писал(а):
Ср май 08, 2019 5:29 pm
webms писал(а):
Вт май 07, 2019 5:25 pm
У меня в вкладке События есть меню с строкой

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

$option = array( array($em_l." Свет", $em_c." Камеры"));
а в Командах запись "Камеры"

когда нажимаю кнопку то пишет что неизвестная команда, если убрать иконку $em_c то все ок

а как вызвать команду Камеры с иконкой?

пс: надеюсь вы меня поняли)
вдруг не заметили сообщение)
Добавить такую же иконку в имя команды, но не факт что получится
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
viktor6
Сообщения: 187
Зарегистрирован: Вс авг 20, 2017 1:46 am
Благодарил (а): 98 раз
Поблагодарили: 6 раз

Re: [Модуль] Telegram (telegram)

Сообщение viktor6 » Чт май 09, 2019 7:53 am

Eraser писал(а):
Вт май 07, 2019 10:08 pm
Управление "Простыми устройствами"
Никаких специфических настроек выполнять не надо, используются параметры ПУ
Во вложениях файлы для импорта команды и обработчика callback
main.png
room.png

зы решил выложить, сам давно пользуюсь
А как отредактировать чтобы ещё температура отображалась?
Raspberry Pi3, с образа от Сергея 3.34
V.A.S.t
Сообщения: 5
Зарегистрирован: Сб май 11, 2019 6:35 pm
Откуда: Иркутск
Благодарил (а): 1 раз
Поблагодарили: 0

Re: [Модуль] Telegram (telegram)

Сообщение V.A.S.t » Чт май 16, 2019 9:08 am

Eraser писал(а):
Вт май 07, 2019 10:08 pm
Управление "Простыми устройствами"
Никаких специфических настроек выполнять не надо, используются параметры ПУ
Во вложениях файлы для импорта команды и обработчика callback
main.png
room.png

зы решил выложить, сам давно пользуюсь
Почему то неправильно считывается статус после включения - отключения. С точностью до наоборот. Пробовал выставить задержку - хоть 1, хоть 5 секунд ни к какому результату не привело. Также были проблем со считыванием при нажатии, но я заменил switch на turnOn и turnOff. Теперь только вышеописанная проблема. Причем если нажать "назад" и снова зайти в комнату - отображается актуальное состояние.
Аватара пользователя
Samir77
Сообщения: 48
Зарегистрирован: Чт фев 02, 2017 7:30 pm
Благодарил (а): 296 раз
Поблагодарили: 2 раза

Re: Модуль "Telegram"

Сообщение Samir77 » Вт май 21, 2019 10:49 am

Kvantos писал(а):
Вт май 07, 2019 12:44 pm
Eraser писал(а):
Вс окт 16, 2016 11:22 am
Вот еще одно довольно интересное решение интерактивной клавиатуры:
Тут на телеге подсказали как усовершенствовать немного (была проблема, в том что после первого нажатия кнопки меню статус не успевает поменяться и отображение текущего статуса невозможно), вот доработанный код, может пригодится. Было бы неплохо ссылку из шапки на него тоже сделать:

Команда "Освещение":

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

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ts = $off;
$ks = $off;
if (gg("Switch01.status") == 1) {$ts = $on;}
if (gg("RGB01.status") == 1) {$ks = $on;}
$option = array(array($this->buildInlineKeyboardButton($text=$ts."Коридор","","Callback_Switch01",""),$this->buildInlineKeyboardButton($text=$ks."Подсветка в зале","","Callback_RGB01","") ) );
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb);
$this->sendContent($content);

Событие "Callback_light":

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

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ts = $off;
$ks = $off;
$sw = false;
if ($callback == 'Callback_Switch01') {
    $sw = true;
    if (gg("Switch01.status") == 1) { $ts = $off; }
    else { $ts = $on; }
    cm("Switch01.switch");
}


if ($callback == 'Callback_RGB01') {
    $sw = true;
    if (gg("RGB01.status") == 1) { $ks = $off; }
    else { $ks = $on; }
    cm("RGB01.switch");
}
if ($sw) {
$option = array(array($this->buildInlineKeyboardButton($text=$ts."Коридор","","Callback_Switch01",""),
                        $this->buildInlineKeyboardButton($text=$ks."Подсветка в зале","","Callback_RGB01","") ) );
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Управление светом:",$keyb);
}

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

Команда свет вот такой код

$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');

$objects=getObjectsByClass("SControllers");
print_r($objects);
foreach($objects as $obj) {
$state = $off;
if (gg($obj['TITLE'].".status") == 1)
$state = $on;
$option[] = $this->buildInlineKeyboardButton($text=$state.getObject($obj['TITLE'])->description,"","CallbackSwitch_".$obj['TITLE'],"");
}

$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);

$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb);
$this->sendContent($content);


callback


$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');

if (strpos($callback, 'CallbackSwitch_') !== false) {
$skip = true;
$obj = substr($callback, 15);
$text = getObject($obj)->description;
cm($obj.".switch");
if (gg($obj.".status") == 1)
$text .= " выключен ". $off;
else
$text .= " включен ". $on;
$this->sendAnswerCallbackQuery($callback_id,$text, false);
}

Заранее благодарен за ответ)
ASUS ASPIRE 5739G Windows 7 + Raspberry Pi3 + Broadlink + Sonoff
Аватара пользователя
Kvantos
Сообщения: 218
Зарегистрирован: Вт окт 31, 2017 1:05 pm
Благодарил (а): 20 раз
Поблагодарили: 34 раза

Re: [Модуль] Telegram (telegram)

Сообщение Kvantos » Вт май 21, 2019 3:05 pm

2Samr77
у вас проблема может быть совсем не в нем, а в свойствах объекта, вернее в изменении, вероятно они не успевают поменяться.....
я брал готовый код от Eraser viewtopic.php?f=5&t=2768&p=102906#p102906
и дорабатывал под себя, вот мой рабочий код, хотя он в принципе работает, но там свойства status это команда выключателю, но нужно доработать чтобы было еще отдельное поле feedbackstatus - реальное состояние выключателя....

---МЕНЮ---
СпойлерПоказать

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

$this->sendAction($chat_id);

$off = hex2bin('F09F8C91');
$on  = hex2bin('F09F8C95');
$run = hex2bin('F09F8F83');

$rooms = getObjectsByClass("Rooms");
$total = count($rooms);
foreach ($rooms as $room) {
    $room_text= getObject($room['TITLE'])->description;
    if (gg($room['TITLE'].".SomebodyHere")==1) $room_text.= " ".$run;
    $option[] = $this->buildInlineKeyboardButton($text=$room_text,"","callSD_room_".$room['TITLE'],"");
}

$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);

$content = array('chat_id' => $chat_id, 'text' => "Выберите комнату:", 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$res = $this->sendContent($content);

--- СОБЫТИЕ CallbackSD ---
СпойлерПоказать

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

// код от 16.05.2019
if (strpos($callback, 'callSD_') !== false) {
 $skip = true;
 $cmd = explode("_", $callback);
 //$this->sendAnswerCallbackQuery($callback_id, $callback." ".$cmd[1], false);
 $endpoint = "editMessageText";
 $content = array(
                'chat_id' => $chat_id,
  				'message_id' => $message_id,
                'parse_mode' => 'HTML'
            );
 $title_kb = "";
 if ($cmd[1] == 'home')
 {
  $run = hex2bin('F09F8F83');
  $rooms = getObjectsByClass("Rooms");
  $title_kb = "Комнаты:";
  foreach ($rooms as $room) {
    $room_text= getObject($room['TITLE'])->description;
    if (gg($room['TITLE'].".SomebodyHere")==1) $room_text.= " ".$run;
    $option[] = $this->buildInlineKeyboardButton($text=$room_text,"","callSD_room_".$room['TITLE'],"");
  }
 }
 if ($cmd[1] == 'room' || $cmd[1] == 'device')
 {
  $room = $cmd[2];
  $off = hex2bin('F09F8C91');
  $on  = hex2bin('F09F8C95');
    
  if ($cmd[1] == 'device')
  {
    $text = getObject($cmd[2])->description;
//	Debmes($cmd[2]); //тут имя конкретного обьекта
	$object_name = $cmd[2]; //сюда имя своего объекта
	$sql = "SELECT classes.TITLE FROM objects JOIN classes ON objects.CLASS_ID = classes.ID WHERE objects.TITLE = '" . DBSafe($object_name) . "'";
	$classname = SQLSelectOne($sql);
//	Debmes($classname['TITLE']); //тут имя родительского класса обьекта
// 	cm($cmd[2].".switch");
	if ($classname['TITLE'] == 'SRGB' && gg($cmd[2].".status") == 0) { //Если RGB и еще НЕ включено, то перед включением указать белый цвет (предотвращение цвета #000000)
		$obj = $cmd[2];
		cm($obj.".turnOn");
		ClearTimeOut("rgbontimer"); //сбрасываем таймер
		SetTimeOut("rgbontimer","sg($obj.'.color.#ffffff'); sg($obj.'.colorSaved.#ffffff');",2);
	} else {cm($cmd[2].".switch");}
	usleep(1500); //я добавил, т.к. не успевает измениться статус 
    if (gg($cmd[2].".status") == 1)
    	$text .= " включен ". $on;
 	else
  		$text .= " выключен ". $off;
    $this->sendAnswerCallbackQuery($callback_id,$text, false);
   $room = gg($cmd[2].".linkedRoom");
  }
  // кнопки устройств
    $title_kb = gg($room.".Title");
    $devices=SQLSelect("SELECT * FROM devices ORDER BY TITLE");
  	foreach($devices as $device) {
     $obj = [];
     $obj['TITLE'] = $device['LINKED_OBJECT'];
    //$this->sendAnswerCallbackQuery($callback_id,$obj['TITLE'], false);
    //$objects=getObjectsByClass("SDevices");
	//foreach($objects as $obj) {
     if (gg($obj['TITLE'].'.linkedRoom')==$room){
      if ($device['TYPE'] == 'relay' || $device['TYPE'] == 'dimmer' || $device['TYPE'] == 'rgb')
      {
      	$state = $off;
 	  	if (gg($obj['TITLE'].".status") == 1) $state = $on;
      	$option[] = $this->buildInlineKeyboardButton($text=$state.getObject($obj['TITLE'])->description,"","callSD_device_".$obj['TITLE'],""); 
      }
      if ($device['TYPE'] == 'camera')
      {
       	$cam = hex2bin('F09F93B7');
      	$option[] = $this->buildInlineKeyboardButton($text=$cam.getObject($obj['TITLE'])->description,"","callSD_camera_".$obj['TITLE'],""); 
      }
     }
    }
    $option[] = $this->buildInlineKeyboardButton($text="Назад","","callSD_home",""); 
 }
 if ($cmd[1] == 'camera')
 {
  $this->sendAction($chat_id,"upload_photo");
  $title_kb = $cmd[2];
  $option[] = $this->buildInlineKeyboardButton($text="Назад","","callSD_room_".gg($cmd[2].'.linkedRoom')."_new",""); 
  $url = BASE_URL.gg($cmd[2].".snapshotPreviewURL");
  $image_path = "/var/www/files/".$cmd[2].".jpg";
  try {
         $data = file_get_contents($url);
         $i = strlen($data);
         $handle = fopen($image_path, "w");
         fwrite($handle, $data);
         fclose($handle);
     } catch (Exception $e) {
             echo 'Caught exception: ',  $e->getMessage(), "\n";
     }
  $endpoint = "sendPhoto";
  $img = curl_file_create($image_path, 'image/png');
  $content['photo'] = $img;
  $content['caption'] = $title_kb;
  $this->deleteMessage($chat_id, $message_id);
 }
 
 if (count($cmd)>3)
 {
  $endpoint = "sendMessage";
 }
 
 $count_row = 3;
 $option = array_chunk($option, $count_row);
 $keyb = $this->buildInlineKeyBoard($option);
 $content['text'] = $title_kb;
 $content['reply_markup'] = $keyb;
 $this->sendContent($content, $endpoint);
 if ($endpoint=="sendMessage")
   $this->deleteMessage($chat_id, $message_id);

}
За это сообщение автора Kvantos поблагодарили (всего 2):
Samir77 (Вт май 21, 2019 4:26 pm) • viktor6 (Вт май 21, 2019 10:24 pm)
Рейтинг: 2.74%
MDM живет на 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
Ответить