{"TITLE":"CallbackSD","DESCRIPTION":"","TYPE_EVENT":"9","ENABLE":"1","CODE":"if (strpos($callback, 'callSD_') !== false) {\r\n $skip = true;\r\n $attachments = array();\r\n\/\/разбираем строку на составляющие\r\n $cmd = explode(\"_\", $callback);\r\n $title_kb = \"\";\r\n if ($cmd[1] == 'home'){\r\n  $run = hex2bin('F09F8F83');\r\n  $rooms = getObjectsByClass(\"Rooms\");\r\n  $title_kb = \"<b>\".\"Комнаты\".\"<\/b>\";\r\n  foreach ($rooms as $room) {\r\n    $room_text= getObject($room['TITLE'])->description;\r\n    if (gg($room['TITLE'].\".SomebodyHere\")==1) $room_text.= \" \".$run;\r\n    $buttons[] = $this->buildKeyBoardButton($room_text,'callback',\"callSD_room_\".$room['TITLE'].\"_\".$cmd[2], 'primary');\r\n  }\r\n \/\/так как максимально количество кнопок - 10, разбиваем кнопки на \"страницы\" и подгружаем необходимую, передавая во все кнопки номер текущей страницы\r\n  $buttons_all = $buttons;\r\n  if(count($buttons_all) > 8) {\r\n  \/\/если страниц больше одной, разбиваем массив кнопок на страницы\r\n  $buttons_pages = array_chunk(array_slice($buttons_all, 9), 8);\r\n  \/\/на первой странице 9 кнопок, место для кнопки \"Далее\" или \"Выход\"\r\n  \tif($cmd[2] == 0) $buttons = array_slice($buttons_all, 0, 9);\r\n  \/\/для остальных 8 кнопок берем из подкотовленного массива, место для кнопок \"Назад\" и \"Далее\"\r\n    else $buttons = $buttons_pages[$cmd[2]-1];\r\n  \/\/если это не первая страница - делаем кнопку \"Назад\"\r\n    if($cmd[2] != 0)$buttons[] = $this->buildKeyBoardButton(\"Назад\",'callback', 'callSD_home_'.$cmd[2]-1, 'secondary');\r\n  \/\/если не последняя - делаем кнопку \"Вперёд\"\r\n  \tif (isset($buttons_pages[$cmd[2]]))$buttons[] = $this->buildKeyBoardButton(\"Далее\",'callback', 'callSD_home_'.$cmd[2]+1, 'secondary');\r\n  }\r\n \/\/если на странице меньше 10 кнопок, то есть страница последняя, добавляем кнопку \"Выход\"\r\n  if(count($buttons) < 10) $buttons[] = $this->buildKeyBoardButton(\"Выход\",'callback', 'callSD_exit', 'negative');\r\n }\r\n else if ($cmd[1] == 'room' or $cmd[1] == 'device' or $cmd[1] == 'lock'){\r\n  $room = $cmd[2];\r\n  $off = hex2bin('F09F8C91');\r\n  $on  = hex2bin('F09F8C95');\r\n  if ($cmd[1] == 'device' or $cmd[1] == 'lock'){\r\n  \tif ($cmd[1] == 'device'){\r\n  \t   $text = getObject($cmd[2])->description;\r\n  \t   if (gg($cmd[2].\".status\") == 1) $text .= \" выключен \". $off;\r\n \t\t else $text .= \" включен \". $on;\r\n  \t} else if ($cmd[1] == 'lock'){\r\n  \t   if (gg($cmd[2].\".lockstatus\")) $text .= \"Замок открыт \". hex2bin('F09F9493');\r\n \t\t else $text .= \"Замок закрыт \". hex2bin('F09F9492');\r\n  \t}\r\n  \tcm($cmd[2].\".switch\");\r\n  \t$this->sendAnswerCallbackQuery($user_id, $event_id, $text);\r\n  \t$room = gg($cmd[2].\".linkedRoom\");\r\n  }\r\n  \/\/ кнопки устройств в комнате\r\n    $title_kb = \"<b>\".gg($room.\".Title\").\"<\/b>\";\r\n    $temp = '';\r\n    $humidity = '';\r\n \t$co2 = '';\r\n \t$door = '';\r\n    $objects = getObjectsByProperty(\"linkedRoom\", \"=\", $room);\r\n  \tforeach($objects as $object) {\r\n      $device = SQLSelectOne(\"SELECT * FROM devices WHERE LINKED_OBJECT='\".$object.\"'\");\r\n      if($device['TYPE'] == 'sensor_temp' or $device['TYPE'] == 'sensor_temphum') $temp.= gg($object.'.value').\"°C \"; \r\n      if($device['TYPE'] == 'sensor_humidity') $humidity.= gg($object.'.value').\"% \";\r\n      else if($device['TYPE'] == 'sensor_temphum')  $humidity.= gg($object.'.valueHumidity').\"% \";\r\n      else if($device['TYPE'] == 'sensor_co2')  $co2.= gg($object.'.value').\"ppm \";\r\n      else if($device['TYPE'] == 'openclose' or $device['TYPE'] == 'unlockable'){\r\n      \t$oc = gg($object . '.ncno') == 'nc' ? 1 - gg($object . '.status') : gg($object . '.status');\r\n      \tif($oc) $door.=' Открыта';\r\n        else $door.=' Закрыта';\r\n      \tif($device['TYPE'] == 'unlockable'){\r\n          if(gg($object . '.lockstatus')){\r\n          \t $state = hex2bin('F09F9492');\r\n          \t $color = 'negative';\r\n          } else {         \r\n          \t$state = hex2bin('F09F9493');\r\n            $color = 'positive';\r\n          }\r\n         $buttons[] = $this->buildKeyBoardButton($state.$device['TITLE'], 'callback', \"callSD_lock_\".$object.\"_\".$cmd[3], $color);\r\n        }\r\n      }\r\n      else if($device['TYPE'] == 'relay' or $device['TYPE'] == 'dimmer' or $device['TYPE'] == 'rgb' or $device['TYPE'] == 'openable'){\r\n        $state = $off;\r\n        $color = 'primary';\r\n        if($device['TYPE'] == 'openable') $status = !gg($object . '.status');\r\n        else $status = gg($object.\".status\");\r\n \t  \tif ($status){\r\n          $state = $on;\r\n          $color = 'positive';\r\n        }\r\n        $buttons[] = $this->buildKeyBoardButton($state.$device['TITLE'], 'callback', \"callSD_device_\".$object.\"_\".$cmd[3], $color);\r\n      } else if($device['TYPE'] == 'camera'){\r\n        $buttons[] = $this->buildKeyBoardButton(hex2bin('F09F8EA5').$device['TITLE'], 'callback', \"callSD_camera_\".$object.\"_\".$cmd[3].\"_\".$cmd[2], 'primary');\r\n      }\r\n    }\r\n \tif($temp != '') $title_kb .= \"\\n\".hex2bin('F09F8CA1').\" \".$temp;\r\n    if($humidity != '') $title_kb .= \"\\n\".hex2bin('F09F92A6').\" \".$humidity;\r\n    if($co2 != '') $title_kb .= \"\\nCO2 \".$co2;\r\n    if($door != '') $title_kb .= \"\\n\".hex2bin('F09F9AAA').\" \".$door;\r\n    $buttons[] = $this->buildKeyBoardButton(\"Назад\",'callback', 'callSD_home_'.$cmd[3], 'secondary');\r\n    $buttons[] = $this->buildKeyBoardButton(\"Выход\",'callback', 'callSD_exit', 'negative');\r\n }\r\n else if ($cmd[1] == 'camera') {\r\n  $this->sendAction($chat_id,\"photo\");\r\n  $title_kb = \"<b>\".$cmd[2].\"<\/b>\";\r\n  $url = BASE_URL.gg($cmd[2].\".snapshotPreviewURL\");\r\n  $image_path = CASH_PATH.$cmd[2].\".jpg\";\r\n  $this->writeLog($image_path);\r\n  try {\r\n         $data = file_get_contents($url);\r\n         $i = strlen($data);\r\n         $handle = fopen($image_path, \"w\");\r\n         fwrite($handle, $data);\r\n         fclose($handle);\r\n     } catch (Exception $e) {\r\n             echo 'Caught exception: ',  $e->getMessage(), \"\\n\";\r\n     }\r\n  $buttons[] = $this->buildKeyBoardButton(\"Назад\",'callback', 'callSD_room_'.$cmd[4].'_'.$cmd[3], 'secondary');\r\n  $buttons[] = $this->buildKeyBoardButton(\"Выход\",'callback', 'callSD_exit', 'negative');\r\n  $attachments = $this->attachPhoto($this->config['GROUP_ID'], $image_path);\r\n }\r\n if ($cmd[1] == 'exit'){\r\n \t$this->messageDelete($user_id, $message_id);\r\n } else {\r\n   $keyboard = $this->buildInlineKeyBoard($buttons, 22222);\r\n \/\/если нет $message_id, значит вызов не из инлайн-клавиатуры - отправляем сообщение\r\n   if(empty($message_id)) $this->sendMessage($user_id, $title_kb, $keyboard, '', $attachments);\r\n \/\/иначе - редактируем сообщение\r\n   else $this->messageEdit($user_id, $message_id, $title_kb, $keyboard, '', $attachments);\r\n }\r\n}"}