Обзорный отчет по комнатам с использованием средств форматирования Телеграма
Очень нравится работать с Мажордомо через Телеграм. Спасибо Eraser'у за чудесный модуль, один из моих любимых, не вызывающий никаких нареканий.
Давно хотелось получать сводную инфу о состоянии всего дома разом, а не продираться через систему многоуровневых меню до нужного элемента.
Тут и статейка Удобный просмотр данных сенсоров через телеграмм от directmann подоспела с нужными решениями.
Но отображение всех датчиков по-строчно в виде клавиатуры как-то не зашло((
Решил сделать лист отчета с выводом инфы по комнатам. Внешний вид - на картинке к блогу.
По-моему, наглядно.
Итак, скрипт:
//SendTeleStatus
//Картинки (как их получить, см Примечание и есть отдельный блог и на форуме )
$drop = hex2bin('F09F92A7'); //капля
$tmp = hex2bin('F09F8CA1'); //термометр
$walk = json_decode('"'.'\ud83d\ude42'.'"'); //ходют
$nomove = json_decode('"'.'\ud83d\udeb7'.'"'); //не ходют
$green = json_decode('"'.'\ud83d\udc9a'.'"'); //зеленое сердце
$yellow = json_decode('"'.'\ud83d\udc9b'.'"');// и т.д.
$red = json_decode('"'.'\ud83d\udc94'.'"');
$subj = '<b>';
$subj .= gg('timeNow').'</b>'.PHP_EOL.'<code>'.gg('somebodyHomeText').PHP_EOL.'...'.PHP_EOL;
$subj .= gg('lastSayMessage').PHP_EOL;
$subj .='...'.'</code>'.PHP_EOL;
$subj .= '<b>Статусы:</b>'.PHP_EOL;
$subj .='<code>';
$subj .='Система: ';//.gg('system.stateTitle').PHP_EOL;
if(gg('System.stateColor')=='green'){
$subj .= $green.PHP_EOL;
}else{
if(gg('System.stateColor')=='yellow') $subj .= $yellow;
if(gg('System.stateColor')=='red') $subj .= $red;
$subj .= gg('System.stateDetails').PHP_EOL;
}
$subj .='Связь : ';//.gg('Communication.stateTitle').PHP_EOL;
if(gg('Communication.stateColor')=='green'){
$subj .= $green.PHP_EOL;
}else{
if(gg('Communication.stateColor')=='yellow') $subj .= $yellow;
if(gg('Communication.stateColor')=='red') $subj .= $red;
$subj .= gg('Communication.stateDetails').PHP_EOL;
}
$subj .='...'.PHP_EOL.'</code>';
$subj .='<b>комнаты</b><code> '.$tmp.'°С '.$drop.'% '.$walk.PHP_EOL;//заголовок статуса (я подгонял под свой телефон((
$objects = getObjectsByClass("Rooms");
foreach($objects as $obj) {
$room = mb_substr(gg($obj['TITLE'].".title")." ",0,12); // тут основная фишка!
$room .= mb_substr(gg($obj['TITLE'].".Temperature")." ",0,7);
$room .= mb_substr(gg($obj['TITLE'].".Humidity")." ",0,5);
if(gg($obj['TITLE'].".SomebodyHere")){
$room .= $walk.gg($obj['TITLE'].".LatestActivityTime");
}else{
$room .= $nomove.substr(gg($obj['TITLE'].".LatestActivityTime"),0,5);
}
$subj .= $room.PHP_EOL;
}
$subj .= '</code>';
//echo($subj);
runScript('SendTelegram', array("message"=>$subj));
Основная фишка статьи - получение псевдотаблицы ограниченными средствами форматирования телеграма.
Это сделано с помощью имитации табуляции моноширинного шрифта телеграма:
$room = mb_substr(gg($obj['TITLE'].".title")." ",0,12);
эта строка делает первую колонку с именами комнат шириной в 12 символов, чтобы следующая колонка выводилась ровненьким столбиком, так же фоматируется температура и влажность.
строка
runScript('SendTelegram', array("message"=>$subj));
отправляет в телегу текст - абсолютно стандартный:
//SendTelegram
// params
$message = $params['message'];
$img = $params['img'];
$video = $params['video'];
$album = $params['album'];
$descr = $params['description'];
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//Если текст
if ($message){
$telegram_module->sendMessageToAll($message);
}
//Если картинка
if ($img) {
$telegram_module->sendAction($chat_id,"upload_photo");
$telegram_module->sendImageToAll($img,$descr);
}
//Если кино
if ($video) {
$telegram_module->sendVideoToAll($video);
}
//Если альбом
if ($album) {
$telegram_module->sendAlbumToAll($album,$descr);
}
Бот - отправляешь ему смайл, он в ответ его код. @getemojicodebot
Домодедово, Россия
На форуме: xor