Приветствую Вас:)
В этом материале рассмотрим как нам украсить график(и) полученные в этой статье. В основном мне попадались графики у которых для заливки цвета брались в процентном соотношении от текущей линии графика и раскрашивались, т.е. назначались цвета с шагом к примеру 10%, далее на практике выходит, что 10° или 20° на самом верху будут иметь одинаковый цвет, вот пример (взят из галереи RRDtool, правда измеряется не температура, а давление, но суть не меняет (можно посмотреть онлайн))
На графике видно, что значение 676 раскрашено точно так же как и 684,что на мой взгляд не совсем правильно, хотя сам график очень даже симпатичный:).
Мы пойдем другим путем, приступим.
Немного изменим наш код скрипта для генерации графика
#!/bin/sh #Экспортируем нашу локаль, у меня KOI-8, свою локаль Вы можете проверить командой "locale" #без этого на график не получится вывести кириллические символы export LANG=KOI8-R export LC_ALL=ru_RU.KOI8-R #Строим график либо все в одну строку, либо через разделитель " ", комментарии в строке вызовут ошибку rrdtool graph /usr/local/www/temperature/test.png --width 400 --height 250 --font TITLE:13 --color BACK#444444 --color SHADEA#444444 --color SHADEB#444444 --color CANVAS#444444 --color FONT#ff7518 --slope-mode --start -1d --end now --units-exponent 0 --vertical-label "Температура, C°" --title "Температура за сутки" --imgformat PNG DEF:temperature=/var/db/rrdtool/temperature.rrd:temperature:AVERAGE LINE1:temperature#00ff00:"" CDEF:tp_17=temperature,0,GT,temperature,100,GT,34,temperature,IF,0,IF AREA:tp_17#FF0000 CDEF:tp_16=temperature,0,GT,temperature,32,GT,32,temperature,IF,0,IF AREA:tp_16#FF1100 CDEF:tp_15=temperature,0,GT,temperature,30,GT,30,temperature,IF,0,IF AREA:tp_15#FF2200 CDEF:tp_14=temperature,0,GT,temperature,28,GT,28,temperature,IF,0,IF AREA:tp_14#FF3300 CDEF:tp_13=temperature,0,GT,temperature,26,GT,26,temperature,IF,0,IF AREA:tp_13#FF4400 CDEF:tp_12=temperature,0,GT,temperature,24,GT,24,temperature,IF,0,IF AREA:tp_12#FF5500 CDEF:tp_11=temperature,0,GT,temperature,22,GT,22,temperature,IF,0,IF AREA:tp_11#FF6600 CDEF:tp_10=temperature,0,GT,temperature,20,GT,20,temperature,IF,0,IF AREA:tp_10#FF7700 CDEF:tp_09=temperature,0,GT,temperature,18,GT,18,temperature,IF,0,IF AREA:tp_09#FF8800 CDEF:tp_08=temperature,0,GT,temperature,16,GT,16,temperature,IF,0,IF AREA:tp_08#FF9900 CDEF:tp_07=temperature,0,GT,temperature,14,GT,14,temperature,IF,0,IF AREA:tp_07#FFAA00 CDEF:tp_06=temperature,0,GT,temperature,12,GT,12,temperature,IF,0,IF AREA:tp_06#FFBB00 CDEF:tp_05=temperature,0,GT,temperature,10,GT,10,temperature,IF,0,IF AREA:tp_05#FFCC00 CDEF:tp_04=temperature,0,GT,temperature,8,GT,8,temperature,IF,0,IF AREA:tp_04#FFDD00 CDEF:tp_03=temperature,0,GT,temperature,6,GT,6,temperature,IF,0,IF AREA:tp_03#FFEE00 CDEF:tp_02=temperature,0,GT,temperature,4,GT,4,temperature,IF,0,IF AREA:tp_02#FFFF00 CDEF:tp_01=temperature,0,GT,temperature,2,GT,2,temperature,IF,0,IF AREA:tp_01#ffff00 CDEF:tm_17=temperature,0,LT,temperature,-100,LT,-34,temperature,IF,0,IF AREA:tm_17#0000FF CDEF:tm_16=temperature,0,LT,temperature,-32,LT,-32,temperature,IF,0,IF AREA:tm_16#0011FF CDEF:tm_15=temperature,0,LT,temperature,-30,LT,-30,temperature,IF,0,IF AREA:tm_15#0022FF CDEF:tm_14=temperature,0,LT,temperature,-28,LT,-28,temperature,IF,0,IF AREA:tm_14#0033FF CDEF:tm_13=temperature,0,LT,temperature,-26,LT,-26,temperature,IF,0,IF AREA:tm_13#0044FF CDEF:tm_12=temperature,0,LT,temperature,-24,LT,-24,temperature,IF,0,IF AREA:tm_12#0055FF CDEF:tm_11=temperature,0,LT,temperature,-22,LT,-22,temperature,IF,0,IF AREA:tm_11#0066FF CDEF:tm_10=temperature,0,LT,temperature,-20,LT,-20,temperature,IF,0,IF AREA:tm_10#0077FF CDEF:tm_09=temperature,0,LT,temperature,-18,LT,-18,temperature,IF,0,IF AREA:tm_09#0088FF CDEF:tm_08=temperature,0,LT,temperature,-16,LT,-16,temperature,IF,0,IF AREA:tm_08#0099FF CDEF:tm_07=temperature,0,LT,temperature,-14,LT,-14,temperature,IF,0,IF AREA:tm_07#00AAFF CDEF:tm_06=temperature,0,LT,temperature,-12,LT,-12,temperature,IF,0,IF AREA:tm_06#00BBFF CDEF:tm_05=temperature,0,LT,temperature,-10,LT,-10,temperature,IF,0,IF AREA:tm_05#00CCFF CDEF:tm_04=temperature,0,LT,temperature,-8,LT,-8,temperature,IF,0,IF AREA:tm_04#00DDFF CDEF:tm_03=temperature,0,LT,temperature,-6,LT,-6,temperature,IF,0,IF AREA:tm_03#00EEFF CDEF:tm_02=temperature,0,LT,temperature,-4,LT,-4,temperature,IF,0,IF AREA:tm_02#00FFFF CDEF:tm_01=temperature,0,LT,temperature,-2,LT,-2,temperature,IF,0,IF AREA:tm_01#CDFFFF GPRINT:temperature:LAST:"Текущая:%3.2lfC°" GPRINT:temp_0:AVERAGE:"Средняя:%3.2lfC°" GPRINT:temp_0:MAX:"Максимальная:%3.2lfC°" GPRINT:temp_0:MIN:"Минимальная:%3.2lfC°j" HRULE:0#00ffff
Где мы определили несколько CDEF (CDEF:имя-переменной=выражение_в_обратной_польской_записи (виртуальный DS)):
- tp_01-tp_17 — будет расскрашивать на графике положительную температуру с шагом в 2 градуса от желтого к красному
- tm_01-tm_17 — раскрашивают график при отрицательных значениях температуры с шагом в 2 градуса от голубого к синему
Вот что у меня получилось на выходе
Построил график за 2 месяца (машинка тестовая, использовалась исключительно для написания статей про Digitemp и RRDtool и проверки правильности скриптов, из-за этого мало значений на графике, т.к. после написания статей термометр был возвращен в серверную:)).
Ну собственно все, спасибо за внимание:)
А я так понимаю, что под cgi понималось, что график будет рисоваться не регулярно, а только по запросу из браузера, но про это не написано?
Приветствую! Здесь не про cgi(rrdcgi), описан обычный shell скрипт, который по cron генирит графики.
Вы хотите через rrdcgi делать графики?
Написал про CGI
Чего то не хватает в скрипте, повторил градиентную заливку и когда не было данных (нет питания) значение заливки максимум, а не пустота. Админ открой секрет. И еще поделись скриптом на фазы луны и прочее под графиком.
Приветствую! Насчет фаз луны и восходов-заходов на днях напишу.
Со скриптом — я его особо не отлаживал, писал для статьи, проверил на тестовом компе — все работало, но не тестировал при отсутствии данных.
Вы обещали на днях поделится информацией о фазах луны :)
Приветствую!
Что-то дел много:)
Делал из этого https://github.com/dfeyer/moonphase, если будут вопросы — обращайтесь.
Если перейти по ссылке Температура (в шапке), выбрать период год то на графике в мае месяце есть пропуск, смотрится куда красивее чем зашкаливание по максимуму :)