directman

 
<<< Back

Отправляем график hightcharts свойства любого объекта в телеграмм

На основе предыдущих наработок сделал универсальную функцию, которой можно передавать имя свойства в виде параметра

Пример вызова из сценария:

include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
  $chartPNG = $charts->getImagefrom_obj('gismeteo.temp','white','area',60,350, 1000);
print('<br>Путь к файлу: ' . $chartPNG . '<br><br>');
print('<img src="' . $chartPNG . '">');

где вместо gismeteo.temp -имя.своство вашего объекта,
white - стиль графика, может быть любой из вариантов (avocado,dark-blue,dark-green,dark-unica,gray,grid-light,grid,high-contrast-dark,high-contrast-light,sand-signika,skies,sunset) https://github.com/highcharts/highcharts/tree/mast...)
area - тип графика, может быть spinline, area....
60 - количество дней, за которое нужно строить график
350 - высота графика, пиксели
1000 - ширина графика, пиксели

Т.о. в телеграмм создаем команды:

//white - стиль графика, может быть любой из вариантов (avocado,dark-blue,dark-green,dark-unica,gray,grid-light,grid,high-contrast-dark,high-contrast-light,sand-signika,skies,sunset) https://github.com/highcharts/highcharts/tree/mast...)
//area - тип графика, может быть spinline, area....
//60 - количество дней, за которое нужно строить график
//350 - высота графика, пиксели
//1000 - ширина графика, пиксели

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$objects=getObjectsByClass("SHumSensors");
foreach($objects as $obj) {
 $objj=getObject('Sensor_temphum04');
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}  

     if (gg($obj['TITLE'].".value") ){
//      if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";
    //$option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F92A7').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:curve:grid");
      $option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F92A7').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:area:green");

     }
}

////////////////////////////////////
////////////////////////////////////
////////////////////////////////////

$objects=getObjectsByClass("STempSensors");
//print_r($objects);
foreach($objects as $obj) {

  $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}   

// if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";
     if (gg($obj['TITLE'].".value") )

//    $option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F8CA1').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:curve:green");
      $option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F8CA1').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:area:grid");
}

$objects=getObjectsByClass("STempHumSensors");
//print_r($objects);
foreach($objects as $obj) {

 $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}   

     if (gg($obj['TITLE'].".value") )

    //$option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F8CA1').gg($obj['TITLE'].".value")."°;".hex2bin('F09F92A7').gg($obj['TITLE'].".valueHumidity")."%".$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:curve:green");
     $option[] = $telegram_module->buildInlineKeyboardButton(hex2bin('F09F8CA1').gg($obj['TITLE'].".value")."°;".hex2bin('F09F92A7').gg($obj['TITLE'].".valueHumidity")."%".$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:area:sunset");
}   
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
$objects=getObjectsByClass("SGeneralSensors");
//print_r($objects);
foreach($objects as $obj) {

 //if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";
  $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}   

     if (gg($obj['TITLE'].".value") )

//    $option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F92A2').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":31:curve:orange");
$option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F92A2').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":31:area:orange"); 
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
$objects=getObjectsByClass("SCounters");
//print_r($objects);
foreach($objects as $obj) {

 //if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";
  $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}    

     if (gg($obj['TITLE'].".value") )

    //$option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F939B').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":365:bar:orange");
$option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F939B').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":365:area:orange");      
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
$objects=getObjectsByClass("SPressureSensors");
//print_r($objects);
foreach($objects as $obj) {

// if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";

  $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}   

     if (gg($obj['TITLE'].".value") )

//    $option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F90A3').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":31:curve:orange");
    $option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F90A3').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":31:area:orange");      
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
$objects=getObjectsByClass("SLeak");
//print_r($objects);
foreach($objects as $obj) {
 $objj=getObject($obj['TITLE']);
 $lr=$objj->description;
 if (strlen($lr)>2) {$lr=" (".$lr.")";} else {$lr="";}    

// if (gg($obj['TITLE'].".linkedRoom")) $lr=" (".gg($obj['TITLE'].".linkedRoom").")"; else $lr="";
     if (gg($obj['TITLE'].".value") )

//    $option[] = $telegram_module->buildInlineKeyboardButton($text=$obj['TITLE'].": ".hex2bin('F09F8EA3').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:curve:green");
    $option[] = $telegram_module->buildInlineKeyboardButton($text=hex2bin('F09F8EA3').gg($obj['TITLE'].".value").$lr,"","Callback_sensorhistory_".$obj['TITLE'].".value".":7:area:green");      
}

$count_row = 1;
$option = array_chunk($option, $count_row);
$keyb = $telegram_module->buildInlineKeyBoard($option);

    $content = array('chat_id' => $chat_id, 'text' => "Датчики: ", 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$telegram_module->sendContent($content); 

И добавляем callback

include_once(DIR_MODULES . 'telegram/telegram.class.php');

if (substr($callback,9,13)== 'sensorhistory') 
{
 $obj=explode(':',substr($callback,23))[0];
 $days=explode(':',substr($callback,23))[1];
 $gtype=explode(':',substr($callback,23))[2];
 $color=explode(':',substr($callback,23))[3];
 if ($days==365)  {$px=37; $int= 2592000;}
 if ($days==31)  {$px=6; $int= 604800;}
//$telegram_module->sendMessageToAll($obj);
$text=$obj.':'.chr(10);
 $ar=getHistoryAvgDay($obj, time()-$days*86400,  time());
foreach ($ar as $key=>$val)
{
 $diff=round($val['VALUE']-$last,2);

 if ($last) $difftxt=' ('.$diff.')';
 $text.=$val['VALUE']."  :  ".$val['ADDED'].$difftxt.chr(10);
 $last=$val['VALUE'];

}

$telegram_module->sendMessageToAll($text);

include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$chartPNG = $charts->getImageFromObj($obj,'white','area',$d,350, 1000);
$telegram_module->sendImageToAll('.'.$chartPNG);

}

Теперь при запросе параметра в ответе будет прилетать набор данных и график hightcharts.

1

Основано на предыдущем посте https://connect.smartliving.ru/profile/1502/blog28...
И наработках skysilver https://connect.smartliving.ru/profile/461/blog/ek...

Внимание: данный скрипт будет работать после одобрения https://github.com/sergejey/majordomo-charts/pull/...

Discuss (5) (5)

See also:
2021-03-02 Добавляем новые или недостающие метрики управления устройств в модуле zigbee2mqtt
2021-02-16 Установка Majordomo на JetHUB D1
2021-02-02 Shelly 1
2020-09-30 Команды для назначения владельцев папок
2020-09-16 Собираем список ip вызывных панелей с поддержкой SIP
2020-07-03 Получаем безопасный доступ к Web странице MajorDoMo
2020-04-24 Установка MajorDoMo на synology в 3 клика
2020-02-13 Настройка модуля zigbee2mqtt для работы с zigbee2mqtt или шлюзом sls zigbee gateway
2020-02-13 Настройка модуля zigbee2mqtt для работы с zigbee2mqtt или шлюзом sls zigbee gateway
2020-01-25 Команды для настройки прав пользователей на папку с majordomo
2020-01-23 Отключаем строгий режим MYSQL штатными средствами
2019-10-12 Подключаем светодиодные ленты к контроллеру MegaD
2019-10-11 Варианты интеграции электроприводов
2019-09-30 Выбор источников сигнала телевизоров LG 2013
2019-09-29 Узнаем версию дистрибутива linux
2019-09-24 Установка необходимых пакетов в xpenology через docker
2019-09-16 Примеры разметки Markdown
2019-09-14 Краткий обзор выключателей, в том числе Sonoff T4EU1C
2019-09-13 Сценарий для канала @MajorDoMo_feed
2020-03-26 Опыт установки Synology DSM
2019-09-09 Делаем majordroid лаунчером андройд по-умолчанию.
2019-09-04 Реализация сценария "кто-то пришел"
2019-09-17 Автономная сигнализация на базе контроллера megad-2561
2019-08-27 Управление громкостью терминалов через телеграмм
2019-08-26 Полноценная консоль в браузере (wetty)
2019-08-16 Точечное регулирование радиаторов отопления
2019-08-18 Собираем голосовой помощник на базе WM8960 Audio HAT и raspberry pi zero w
2019-08-13 Общедоступная ссылка с закатом, рассветом и текущей погодой
2019-07-24 Самый дешевый вариант видеонаблюдения
2019-07-22 Запуск MajorDroid на одноплатниках, старых планшетах, телефонах.
2019-07-22 Запуск Majordroid на старом железе
2019-07-15 Устанавливаем opencv и необходимые библиотеки на ubuntu 18.04 без использования python
2019-07-05 Решение проблемы Incorrect integer value: '' for column 'ID' at row 1
2019-07-04 О приборах учета и удаленном снятии показаний (вода и газ)
2019-07-04 О приборах учета и удаленном снятии показаний (электричество)
2019-07-03 Конвертируем rs-485 в TCP-IP
2019-06-24 Наблюдение за радиационной обстановкой в регионе
2019-06-06 Меню пылесоса Xiaomi в телеграмм
2019-06-06 Удобный просмотр данных сенсоров через телеграмм
2019-06-06 Просмотр камер через телеграмм
2019-06-06 Управление светом через телеграмм
2019-06-06 Колор-пикер для телеграм
2019-05-06 Список символов emoji
2019-04-17 Установка z-way на Ubuntu
2019-04-16 Решение проблемы ERROR 1040 (HY000): Too many connections
2018-09-09 Список домофонов с IP интерфейсом
2018-08-29 Список кондиционеров с wifi
2018-08-29 Список доступных к покупке IP колонок
2018-07-15 Интеграция датчика Mi flora plant к системе УД MAJORDOMO
2018-06-13 Полезные команды для работы с git
2018-05-27 преобразование html страниц в картинку и отправка в телеграмм
2018-05-24 Полезные sql запросы
2018-05-23 Создание образа nand памяти orange pi plus2
2018-05-16 Команды для работы с базой данных напрямую
2018-04-13 Индикаторы о заряде батареек без использования картинок
2018-04-06 Установка и настройка python на windows для работы систем распознавания
2018-04-05 Распознавание лиц подходящих к двери людей с помощью ip камеры и открытие двери, если нейросеть признала своего
2018-04-04 Управление таймерами выключения света
2018-04-04 Управление RGB контроллером на базе ESP8266
2018-04-03 Увеличение разрешения китайских камер на чипе hi3516c H264
2018-03-13 Использование колонки google home в качестве терминала Majordomo
2018-03-13 Установка и подключение rtl usb донгла для чтения датчиков температуры и кнопок 433 мгц
2018-03-13 Настройка брокера MQTT
2018-02-17 Проект "умная входная дверь"
2018-02-11 Отправка всех значений свойства объекта в телеграм
2017-12-21 получение адреса по GPS координатам
2017-12-21 получение / передача GPS координат сервису livegps.com
2017-12-21 чтение мгновенных данных U,P, I электросчетчика милур 104
2017-12-21 Получение координат с маяков и gsm сигнализаций starline-online.ru

Екатеринбург, Россия

На форуме: directman66