[Модуль] Charts (charts)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] Charts (charts)

Сообщение xor » Вт май 17, 2022 1:16 pm

~220v писал(а):
Вт май 17, 2022 3:25 am
xor писал(а):
Пн май 16, 2022 4:15 pm
а где вы видите нулл в бд? исторические графики из этой таблицы строятся, там нулл исключен
Пожалуйста, прокомментируйте подробнее, не силен в базах... Не соображу что вы хотите донести до меня :oops:
я писал о том, что в нашей таблице для графиков вообще не может быть значения нулл по определению и картинка это подтверждала. механизм мускула при попытке записи нулла(не строки null, а именно пустого значения) автоматом подставляет 0.
Другими словами, исключено появление пустого значения (null) в данных для графиков со стороны мдм(

Обычно решение об использовании null в данных происходит при разработке бд, на этом основании строится вся последующая логика обработки данных. Отказ от использования нулла сильно упрощает первоначальную разработку, тк его обработка нетривиальна.
А так-то логично - если значения датчика получаются его явным опросом или он должен присылать данные регулярно, то тут использование нулла прямо указывает на ошибку работы датчика (он не ответил на опрос или в ожидаемое время не прислал данные)
Конечно, можно подправить определение таблицы истории, разрешив писать туда пустые значения, но неизвестно, где это может выстрелить ошибкой в другом модуле при существующих обстоятельствах(
За это сообщение автора xor поблагодарил:
~220v (Вт май 17, 2022 11:55 pm)
Рейтинг: 1.16%
Аватара пользователя
~220v
Сообщения: 96
Зарегистрирован: Пн дек 23, 2019 5:56 pm
Благодарил (а): 109 раз
Поблагодарили: 18 раз

Re: [Модуль] Charts (charts)

Сообщение ~220v » Вт май 17, 2022 5:06 pm

Теперь понял. Тогда получается, в данных Highcharts Setup
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, null, 10.3, 6.6, 4.8]
null интерпретируется как пустота, и разрыв линии есть. А если я в БД пишу null то єто уже строковое значение... :cry:
И именно пустоту, которая требуется мне для разрыва, никак не записать, бо нет такой возможности...

Выходит что надо модуль доделать чтоб строка "null" понималась им как пустота null. Єх... А автор давно уже тишина...
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] Charts (charts)

Сообщение xor » Сб май 21, 2022 7:02 pm

~220v писал(а):
Вт май 17, 2022 5:06 pm
Теперь понял. Тогда получается, в данных Highcharts Setup
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, null, 10.3, 6.6, 4.8]
null интерпретируется как пустота, и разрыв линии есть. А если я в БД пишу null то єто уже строковое значение... :cry:
И именно пустоту, которая требуется мне для разрыва, никак не записать, бо нет такой возможности...

Выходит что надо модуль доделать чтоб строка "null" понималась им как пустота null. Єх... А автор давно уже тишина...
вот как удалось)
Изображение
при данных таких - при записи нулла, как мы знаем, сам он не записывается, а записывается пустая строка
Изображение

но придётся в модуль лезть(

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

                                    $data = SQLSelect("SELECT ID, VALUE, UNIX_TIMESTAMP(ADDED) as UNX, ADDED FROM $history_table WHERE VALUE_ID='" . $pvalue['ID'] . "' AND ADDED>=('" . date('Y-m-d H:i:s', $start_time) . "') AND ADDED<=('" . date('Y-m-d H:i:s', $end_time) . "') ORDER BY ADDED");
                                }

                                $total = count($data);
                                $only_boolean = true;
                                for ($i = 0; $i < $total; $i++) {
                                    $dt = ((int)$data[$i]['UNX'] + $diff) * 1000;
                                    if($data[$i]['VALUE'] == '') { //вот тут мы залезли и исправили пустую строку на нулл
                                      $val=null;
                                    } else {
                                    $data[$i]['VALUE'] = (float)str_replace(',', '.', $data[$i]['VALUE']);
                                    $val = (float)preg_replace('/[^\d\.\-]/', '', $data[$i]['VALUE']);
                                    }
                                    if ($val != 0 && $val != 1) {
                                        $only_boolean = false;
                                    }
                                    
                                    $history[] = array($dt, $val);
                                }
Вложения
2022-05-21_18-53-03.png
2022-05-21_18-53-03.png (29.94 КБ) 1290 просмотров
2022-05-21_18-50-30.png
2022-05-21_18-50-30.png (22.53 КБ) 1290 просмотров
За это сообщение автора xor поблагодарили (всего 2):
~220v (Вс май 22, 2022 2:55 am) • AK1 (Вс май 22, 2022 3:51 pm)
Рейтинг: 2.33%
Аватара пользователя
~220v
Сообщения: 96
Зарегистрирован: Пн дек 23, 2019 5:56 pm
Благодарил (а): 109 раз
Поблагодарили: 18 раз

Re: [Модуль] Charts (charts)

Сообщение ~220v » Вс май 22, 2022 3:11 am

xor писал(а):
Сб май 21, 2022 7:02 pm
но придётся в модуль лезть(
Ну голова! Спасибо огромное! Єто прям в пул реквест!

Даст Бог не разбомбят мой умный дом, вернусь домой попробую ковырнуть.

я б возможно даже так попробовал

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

if($data[$i]['VALUE'] == ''   заменил бы на 

if($data[$i]['VALUE'] == 'null'    или if($data[$i]['VALUE'] == 'stop' 


Еще раз спасибо за помощь!
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] Charts (charts)

Сообщение xor » Вс май 22, 2022 10:26 am

~220v писал(а):
Вс май 22, 2022 3:11 am
Еще раз спасибо за помощь!
тут не готовый пуллреквест, а только принцип. править надо в неск. местах модуля и соглашусь - проверять не только на пустую строку, а на всё, что не числа.

пс. кстати, при наличии таких данных с текстом в истории и заменой их на 0 неверно работают исторические функции некоторые(
Например, в среднем вместо исключения данных 0 появятся((
так что, если править, то много. постараюсь до автора донести
За это сообщение автора xor поблагодарили (всего 2):
~220v (Вс май 22, 2022 11:31 am) • AK1 (Вс май 22, 2022 3:51 pm)
Рейтинг: 2.33%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] Charts (charts)

Сообщение xor » Ср июн 01, 2022 9:27 pm

xor писал(а):
Вс май 22, 2022 10:26 am
~220v писал(а):
Вс май 22, 2022 3:11 am
Еще раз спасибо за помощь!
тут не готовый пуллреквест, а только принцип. править надо в неск. местах модуля и соглашусь - проверять не только на пустую строку, а на всё, что не числа.

пс. кстати, при наличии таких данных с текстом в истории и заменой их на 0 неверно работают исторические функции некоторые(
Например, в среднем вместо исключения данных 0 появятся((
так что, если править, то много. постараюсь до автора донести
связанная задачка - оказалось, в мускуле нет штатной функции - is_number(
нашёл такую замену (1 для чисел, 0 - прочее)
SELECT *,
DATAVALUE REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$' as isNumeric
FROM cached_values

ее можно оформить функцией mysql в окне запроса для базы db_terminal

drop function if exists isNumber;
CREATE FUNCTION isNumber(inputValue VARCHAR(255))
RETURNS INT DETERMINISTIC
RETURN inputValue REGEXP '^[+-]?[0-9]*([0-9]\\.|[0-9]|\\.[0-9])[0-9]*(e[+-]?[0-9]+)?$';

и теперь можно использовать в запросах
select isnumber('-123.05'),isnumber(''),isnumber(null),isnumber('0000'),isnumber('-1.25e10');
SELECT * FROM cached_values WHERE isnumber(DATAVALUE)=1;
За это сообщение автора xor поблагодарил:
andrey040670 (Ср июн 01, 2022 9:30 pm)
Рейтинг: 1.16%
pasha413
Сообщения: 131
Зарегистрирован: Сб янв 13, 2018 6:28 pm
Благодарил (а): 34 раза
Поблагодарили: 4 раза

Re: [Модуль] Charts (charts)

Сообщение pasha413 » Сб сен 10, 2022 10:34 pm

Создал график, сделал ограничение по минимуму и максимуму температуры, все ок, но при отправке в телегу ограничения другие...
Вложения
IMG_20220910_223157.jpg
IMG_20220910_223157.jpg (100.03 КБ) 897 просмотров
IMG_20220910_223239.jpg
IMG_20220910_223239.jpg (106.82 КБ) 897 просмотров
Моё: Orange Pi Zero H2 + DietPi / Paspberry Pi3b + MJD 3.41
EvgenyG
Сообщения: 217
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 56 раз
Поблагодарили: 1 раз

Re: [Модуль] Charts (charts)

Сообщение EvgenyG » Пт окт 07, 2022 7:47 pm

Подскажите, как сделать общую шкалу для графиков?
Пробовал через установку мин/макс но это не всегда удобно.
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] Charts (charts)

Сообщение xor » Пт окт 07, 2022 11:10 pm

EvgenyG писал(а):
Пт окт 07, 2022 7:47 pm
Подскажите, как сделать общую шкалу для графиков?
Пробовал через установку мин/макс но это не всегда удобно.
в модуле заявлено, что если ед. измерения совпадают, то шкалы схлопываются
2022-10-07_23-09-27.png
2022-10-07_23-09-27.png (33.41 КБ) 767 просмотров
За это сообщение автора xor поблагодарил:
EvgenyG (Сб окт 08, 2022 4:42 am)
Рейтинг: 1.16%
EvgenyG
Сообщения: 217
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 56 раз
Поблагодарили: 1 раз

Re: [Модуль] Charts (charts)

Сообщение EvgenyG » Сб окт 08, 2022 4:43 am

xor писал(а):
Пт окт 07, 2022 11:10 pm
EvgenyG писал(а):
Пт окт 07, 2022 7:47 pm
Подскажите, как сделать общую шкалу для графиков?
Пробовал через установку мин/макс но это не всегда удобно.
в модуле заявлено, что если ед. измерения совпадают, то шкалы схлопываются
2022-10-07_23-09-27.png
Спасибище!!!
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить