"Живые" графики нужна помощь.

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: "Живые" графики нужна помощь.

Сообщение sergejey » Вт окт 02, 2012 7:51 pm

Загрузил изменения в SVN и GitHub -- обновился файл /pChart/index.php и новая папка /highcharts/
Рассказываю по порядку:

1. Пример использования стрелочного индикатора

Для него я сделал выдачу свойства объекта по ссылке:
/pChart/?op=value&p=ws.tempOutside
(где op=value обязательно и вместо ws.tempOutside соответственно нужный объект и свойство)
вызов этой ссылки возвращает текущее значение и всё.
Пример использования есть в файле /highcharts/sample1.php
Вот часть кода, которую я поменял по сравнению с тем, что постили выше:

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

        function(chart) {
            setInterval(function() {
            var url="/pChart/?op=value&p=ws.tempOutside";
            $.ajax({
             url: url,
             }).done(function(data) { 
              if (data!='') {
               //alert(data);
               var point = chart.series[0].points[0];
               point.update(parseFloat(data));
              }
             });

            }, 1000);
2. Пример использования для графика "котировок" (ну или температуры)

Здесь так же пришлось модифицировать /pChart/index.php чтобы поддерживался вызов такого формата:
/pChart/?p=ws.tempOutside&op=values&start=2012/10/02&interval=1200
где op=values обязательно и вместо ws.tempOutside соответственно нужный объект и свойство
вызов этой ссылки возвращает список значений, начиная с даты start (формат ГГГГ/ММ/ДД) и с интервалом в interval секунд

Пример использования есть в файле /highcharts/sample2.php

Ну и вот конкретный код:

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

url = '/pChart/?p=ws.tempOutside&op=values&start=2012/10/02&interval=1200';


        $.getJSON(url, function(data) {
        
                // Create a timer
                var start = + new Date();
        
                // Create the chart
                var chart = new Highcharts.StockChart({
                    chart: {
                        renderTo: 'container',
                                events: {
                                        load: function(chart) {
                                                this.setTitle(null, {
                                                        text: 'Built chart at '+ (new Date() - start) +'ms'
                                                });
                                        }
                                },
                                zoomType: 'x'
                    },
        
                    rangeSelector: {
                        buttons: [{
                            type: 'hour',
                            count: 1,
                            text: '1h'
                        }, {
                            type: 'day',
                            count: 1,
                            text: '1d'
                        }, {
                            type: 'week',
                            count: 1,
                            text: '1w'
                        }, {
                                        type: 'month',
                            count: 1,
                            text: '1m'
                        }, {
                            type: 'month',
                            count: 6,
                            text: '6m'
                        }, {
                            type: 'year',
                            count: 1,
                            text: '1y'
                        }, {
                            type: 'all',
                            text: 'All'
                        }],
                        selected: 3
                    },
        
                        yAxis: {
                                title: {
                                        text: 'Temperature (°C)'
                                }
                        },
        
                    title: {
                                text: 'Температура в г. Харькове 2012-2012'
                        },
        
                        subtitle: {
                                text: 'Built chart at...' // dummy text to reserve space for dynamic subtitle
                        },
                        
                        series: [{
                        name: 'Temperature',
                        data: data,
                        pointStart: Date.UTC(2012, 10, 2),
                        pointInterval: 1200 * 1000,
                        tooltip: {
                                valueDecimals: 1,
                                valueSuffix: '°C'
                        }
                    }]
        
                });
        });
});
Важно, чтобы в этом коде pointStart совпадал с параметром start ссылки и pointInterval (без умножения на 1000) совпадал с interval.

В общем, в примерах оно работает, но я пока ещё не думал о том, как это легко встроить в меню или в сцену. Тут нужна какая-то хитрость, чтобы минимум кода надо было писать. В общем, ещё подумаю... Ну или если кто-то желает по экспериментировать у себя и поделиться результатами, то милости просим :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Urbas81
Сообщения: 289
Зарегистрирован: Вс сен 16, 2012 9:39 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение Urbas81 » Вт окт 02, 2012 10:34 pm

Огромное спасибо! При первой же возможности протестирую.
Urbas81
Сообщения: 289
Зарегистрирован: Вс сен 16, 2012 9:39 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение Urbas81 » Вт окт 02, 2012 11:38 pm

Запустил, графики теперь ожили, в режиме манометра информация обновляется без перезагрузки страницы, второй график тоже понравился, буду разбираться дальше, еще раз спасибо!
BATONS
Сообщения: 107
Зарегистрирован: Сб июн 30, 2012 7:54 am
Благодарил (а): 0
Поблагодарили: 14 раз

Re: "Живые" графики нужна помощь.

Сообщение BATONS » Ср окт 03, 2012 8:46 am

sergejey Спасибо за проделанный труд!
Вечером сегодня попробую у себя запустить эти графики.
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение tammat » Ср окт 03, 2012 9:46 am

Спасибо за графики.
Просто супер
но ...
1. Смещена ось времени на 2 месяца - показывает 4 декабря???
2. Какая кодировка используется. Если меняемменю по диапозонам на русский то там (UTF-8) в заголовке Win& Как сдеать единую кодировку для всех?
3. Ось времени долна быть либо на русском, либо в цифире
Urbas81
Сообщения: 289
Зарегистрирован: Вс сен 16, 2012 9:39 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение Urbas81 » Ср окт 03, 2012 12:01 pm

tammat писал(а):Спасибо за графики.
Просто супер
но ...
1. Смещена ось времени на 2 месяца - показывает 4 декабря???
У себя такого не заметил, правда надо разобраться с временем опроса, а то бывают провалы до 0, но я менял в коде строчку 1200*60, чтоб плотнее писалось, тогда идет смещение времени.
BATONS
Сообщения: 107
Зарегистрирован: Сб июн 30, 2012 7:54 am
Благодарил (а): 0
Поблагодарили: 14 раз

Re: "Живые" графики нужна помощь.

Сообщение BATONS » Ср окт 03, 2012 7:46 pm

Коллеги, я не силен в программировании.
Подскажите, в "Домашних страницах" у меня, для отображения старых графиков был такой код:
<img src="/pChart/?p=sensorVolt.electric&type=24h&width=640">

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

Class: electric
Объект: sensorVolt
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: "Живые" графики нужна помощь.

Сообщение Vit » Ср окт 03, 2012 11:02 pm

BATONS писал(а):Коллеги, я не силен в программировании.
Подскажите, в "Домашних страницах" у меня, для отображения старых графиков был такой код:
<img src="/pChart/?p=sensorVolt.electric&type=24h&width=640">

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

Class: electric
Объект: sensorVolt
В системе пока они не отображаются.....так как нужна доработка чтобы прикртутить их в проект....


Думаю Сергей что нибудь придумает....

Большое ему спасибо за новинки в проекте))
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение tammat » Чт окт 25, 2012 9:15 am

И все-таки проблемы с отображением шкалы времени
Ставлю начальную дату 02/10/2012 и получаю с 02/11/2012 по 25/11/2012
Где это исправить?
B хотелось бы чтобы шкала времени по русски.
Последний раз редактировалось tammat Пт окт 26, 2012 10:26 am, всего редактировалось 1 раз.
tammat
Сообщения: 165
Зарегистрирован: Пт янв 20, 2012 3:05 pm
Благодарил (а): 9 раз
Поблагодарили: 1 раз

Re: "Живые" графики нужна помощь.

Сообщение tammat » Пт окт 26, 2012 7:07 am

Сделал рукификацию шкалы времени

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

       Highcharts.setOptions({
            lang: {
                months:   ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 
                           'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],

                shortMonths:   ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 
                           'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],

                weekdays: ['Вск', 'Пнд', 'Втр', 'Срд', 'Чтв', 'Птн', 'Сбт']
            }
        });
Разобрался с датами
В строке
pointStart: Date.UTC(2012,6,1),
второе значение (месяц) должно быть меньше на 1, т.к. индексация месяца Date.UTC ведется с 0
Вложения
Снимок.JPG
Снимок.JPG (79.56 КБ) 14654 просмотра
Последний раз редактировалось tammat Пт окт 26, 2012 8:52 am, всего редактировалось 2 раза.
Ответить