Charttty - сервис графиков, общие вопросы

jmms

Moderator
Команда форума
Доброго времени суток. (Эта запись периодически обновляется.)

В данной теме предлагаю обсуждать конкретный сервис Chartty, который можно использовать для мониторинга данных с устройств на базе ESP и не только.


Что такое Charttty сейчас?

Это Open-Source сервис для построения графиков по данным из ваших устройств.


Вы можете отправлять данные в этот сервис, например данные о температуре, влажности почвы или наличии освещенности или нет.
  • Charttty может логировать эти данные в табличном виде
  • Charttty добавляет новые колонки с новыми данными, не заставляя вас делать это в интерфейсе
  • В Charttty можно создать много графиков на странице, данные будут выводиться в графиках почти в режиме реального времени
  • Языки: Русский, Украинский, Английский
  • Экспорт данных в Excel
  • События, возможность добавить минимум и максимум для поля, и получать сообщения о выходах за пределы на E-mail или вызовом URL стороннего ресурса
Пока это все что может Charttty на данный момент.


Скоро появится:
https://github.com/jmas/charttty/issues/1

Несколько принципов которые хочется видеть в Chartty:

  • Простота начала работы
  • Меньше форм, больше автоматизации
  • Для мобильных устройств
  • Приемлемая или хорошая скорость работы интерфейса

Как начать работать?


1. Перейти на http://charttty.ml
2. Создать аккаунт
3. В окне "Welcome to Charttty" есть URL для отправки данных

URL выглядит подобным образом:
Код:
http://charttty.ml/d/4a64d56223450b11b8eef1ca82203c4ab93a3f89?fieldName=value&field2Name=value2
Где:
4a64d56223450b11b8eef1ca82203c4ab93a3f89 - это приватный API Key
fieldName - название колонки в таблице данных
value - значение, целое или дробное число, если это не так - будет ноль

Кстати URL рабочий, можно попробовать, выдаст "OK".

Пробуйте и задавайте вопросы. Документация будет ориентирована как раз на ваши вопросы.


Если вы хотите фичу и не хотите ждать

Внедрить какую ни будь фичу можно, рассказав о ней здесь, а можно не жать и развернуть сервис из репозитория https://github.com/jmas/charttty и подготовить Pull-Request.

Если не нравится отсутствие тестов, то мне тоже это не нравится. Будем исправляться.

Возможности у ESP, как оказалось, достаточно широкие. Впрочем, как и в случаи с Ардуино, эта штуковина для меня стала новым открытием в мире электроники. Жизнь сложилась так, что основная моя профессия это программирование под веб, но никак не низкоуровневый софт под микроконтроллеры. Отсюда и не знание элементарных вещей, например "где тут аналоговый вход", и "сколько весят боды, биты и байты", "путаница в типах C++" и много-много другой подобной ерунды... Иногда даже думаю: как бы на меня смотрели отцы-основатели программирования. :) Утешает лишь одно, что есть люди которые и этого не знают. Но что я о себе да о себе, попробую наконец рассказать и показать идею и первые попытки ее воплощения.

После покупки ESP-01, я даже не стал мигать светодиодом (угу, кому это нужно), а сел читать и думать чего бы интересного выжать из этой крохотной штуки. Первой прошивкой которую я закатал - была NodeMCU. Но чъорт-побери недостаток хипа (который впрочем я победил через таймеры) и общая нестабильность и перезагрузки доконали меня и я пересел на Arduino IDE. И вот после этого понеслось...

Задумал я сделать обычную поливалку для цветка. И мозг сразу решил это дело смасштабировать и предложил следующую ситуацию: гипотетический друг увидел у меня дома автоматическую поливалку и попросил сделать такую же. Сразу стал вопрос: в каком виде я бы мог передать ему это: поливалка по таймеру и по влажности грунта? Не интересно. Почему бы не сделать: веб-сервис, где будет красивый график по которому будет видно "недостаток" воды от датчика грунта, циклы дня и ночи от фотоэлемента и самое главное: возможность "полить" цветок попивая коктейль где ни будь на пляже. "Хочу, чтобы все было максимально просто.", - сказал я себе.

Сказано - сделано. Итак, что мы имеем на данный момент:

Прошивка на базе скетча для Arduino IDE. Устройство при включении в сеть пробует подключиться по пробитым "заводским параметрам", а если ничего не вышло - создает точку к которой можно подключиться по Wi-Fi.



Здесь все традиционно, кроме адреса электронной почты. Форма заполнена, ESP пошла в перезагрузку. (Все уже наверное догадались, что данные для подключения к точке и E-mail мы сохранили в EEPROM.) После того, как устройство успешно подключилось к точке доступа - мы шлем "привет" на наш сервис. В духе: "привет, сервис, я поливалка для цветов с мак адресом таким то и обладатель мой - человек с таким то E-mail адресом". Сервис смотрит: а есть ли у нас вообще такой пользователь (владелец поливалки) - очевидно, что пользователя нет и сервис услужливо добавляет нового пользователя и регистрирует новое устройство. Поливалка в ответ получает новый ключ-токен по которому она может отправлять данные на сервис и получать задания.

Кхм-кхм. Я уже минут 5 рассказываю о сервисе, а еще даже ничего не показал. Смотрим...



В чем же главная "идея" этого сервиса? Если коротко: постараться все максимально упростить. Пользователь получил девайс, подключился к нему по Wi-Fi и зарегистрировался, на почту прилетела ссылка сразу ведущая в кабинет, где мирно текут данные от новенького устройства.

С точки зрения разработчика устройства - идея следующая... Сервис имеет заранее определенные типы устройств (или профили): "поливалка", "чайник", "электрометла", "кормушка для коз", да все что угодно... Каждый тип устройства имеет свои графики, кнопки, настройки для управления устройством. Разработчик имеет возможность скачать прошивку для такого устройства и прошить ею ESP. Есть желание выложить код для каждого типа устройства и расписать схемы их сборки.

В прошивке хочется все опять таки сделать максимально просто. Условно, по аналогии с Ардуиновскими [inline]setup()[/inline] и [inline]loop()[/inline], я завел такое место где все устройство находится в состоянии "пользователь залогинен на сервисе - можно отправлять данные". Всю остальную "воду" в духе подключение к Wi-Fi точке, логин в сервисе - пришлось написать и отладить. Разработчику осталось вызвать функцию, например: [inline]sync("ground=255&light=300")[/inline]. Данные сразу улетят на сервис и отобразятся в графиках. Реализации функций для управления пинами с сервиса пока, к сожалению, нет.

На каком этапе находится проект и чего хочется. Сейчас "почти готово": регистрация устройства, общение устройство-сервис (передача данных от устройства). Дальше нужно: общение сервис-устройство (создание задач для устройства), контроль выполнения задач, отображение информации в реальном времени, уведомления пользователя по E-mail при наступлении определенных событий. Пока хотя бы это закончить, а дальше будет видно.

Так в чем собственно суть данного поста/проекта? Суть следующая: а кому это нужно? :) Нет, честно, хотелось бы услышать ваше мнение о самой идее такого сервиса в контексте ESP, услышать рекомендации и пожелания или ваши рассуждения в духе каким вы видите идеальный сервис для отображения телеметрии от ESP/Arduino/etc.

Я уверен, из моего поста ничего не понятно. :) Поэтому готов раскрыть все детали, которых пока не густо.
 
Последнее редактирование:

Lstt

New member
Очень интересный пост, но не для всех..Меня лично очень сильно заинтересовал скетч с точки зрения как подключения к сети, сохранение настроек, так и отправка почты.. Очень интересно было бы глянуть...Так как нигде ни встречал живого примера для отправки почты в виде скетча.
 

jmms

Moderator
Команда форума
Доброго времени суток.

После первого поста - сел и задумался. Ведь уже кое что придумано (в смысле транспортный протокол) и уже хорошо работает. Решил проверить работоспособность MQTT и пришел к выводу, что все работает достаточно неплохо, поэтому было решено переписать написанное в 3-ий раз и заодно перенести все из скетча в Arduino библиотеку.

Как выглядит текущая версия сектча (точнее как работать с библиотекой "ESP8266Device"):
Код:
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <WiFiServer.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <MQTT.h>
#include <PubSubClient.h>
#include <ESP8266Device.h>

ESP8266Device dev("waterer", IPAddress(85, 119, 83, 194), 1883);

void setup() {
  Serial.begin(115200);

  Serial.println("Hello.");

  dev.begin();

  dev.on("ground/water", [](String payload){
    // push water
  });

  dev.on("light/on", [](String payload){
    // light on
  });

  dev.on("light/off", [](String payload){
    // light off
  });

  // dev.send("light/value", "1234");
  // dev.send("ground/value", "5678");
}

void loop() {
  dev.loop();
}
So what? Что делает прослойка "ESP8266Device" на данный момент: она выполняет сервисную функцию "настройка Wi-Fi и регистрация пользователя" для дальнейшего общения устройство-главный сервер по MQTT. Для этого добавлен "сахар" в виде лямбда-функций, которые будут принимать данные с сервера; функция [inline]dev.send()[/inline] для того чтобы данные опубликовать уже с устройства на сервер. Пока протокол общения не работает (я в процессе перевода всего добра на MQTT). После прошивки скетча, доступна сеть SSID "waterer", PWD "waterer" (или как назовете). Далее можно открыть в браузере http://192.168.4.1 и настроить железку. Дальше железка перезагрузится и если все успешно - начнет проситься по MQTT, используя IP указанный в конструкторе.

Библиотека еще не доработана!

По просьбе выкладываю текущую версию на github: https://github.com/jmas/ESP8266Device/blob/master/ESP8266Device.h . Надеюсь все понятно, а если нет - пишите. Когда будет более-менее доработанная версия - отпишусь.

Q. Вопрос к знатокам - как заставить Arduino IDE подтягивать (или линковать) бибилиотеки, прописанные в заголовках библиотеки, что бы не приходилось еще раз описывать библиотеки уже в скетче. Или никак? Отпишитесь.

@Lstt Отправка почты будет совершаться с сервера. Если у вас есть подключенный ESP к интернету - вам нужно дернуть собственный скрипт по HTTP и отправить письмо. Но а в целом вам нужно копать в сторону "arduino sendmail", "arduino smtp". Примеров полно.
 
Последнее редактирование:

Lstt

New member
@Lstt Отправка почты будет совершаться с сервера. Если у вас есть подключенный ESP к интернету - вам нужно дернуть собственный скрипт по HTTP и отправить письмо. Но а в целом вам нужно копать в сторону "arduino sendmail", "arduino smtp". Примеров полно.
Спасибо за ответ! В том то всё и дело, что серверов почты с отправкой через SMTP без SSL - приктически не осталось..А ардуина, насколько я понимаю, SSL не потянет.(
 
Последнее редактирование:

jmms

Moderator
Команда форума
Спасибо за ответ! В том то всё и дело, что серверов почты с отправкой через SMTP без SSL - приктически не осталось..А ардуина, насколько я понимаю, SSL не потянет.(
Как вариант найти бесплатный хостинг: можно запускать скрипты или настроить smtp без ssl.
 

jmms

Moderator
Команда форума
Подведу промежуточные итоги. Библиотека заработала как нужно.
Обновил репозиторий, приложил пример.

https://github.com/jmas/ESP8266Device

Пока есть один нюанс: если задать неверные параметры для подключения к Wi-Fi и нажать Continue, то эти параметры успешно сохранятся, а механизма изменения пока нет. Работаю над этим.

Буду рад тестированию со стороны, любым замечаниям по коду (кхм, впервые вижу C++ в глаза).
Для тестирования привожу код брокера, с которым работаю в данный момент.
JavaScript:
var mosca = require('mosca')

var ascoltatore = {
  //using ascoltatore
  type: 'mongo',
  url: 'mongodb://localhost:27017/mqtt',
  pubsubCollection: 'ascoltatori',
  mongo: {}
};

var moscaSettings = {
  port: 1883,
  backend: ascoltatore,
  persistence: {
    factory: mosca.persistence.Mongo,
    url: 'mongodb://localhost:27017/mqtt'
  }
};

var server = new mosca.Server(moscaSettings);
server.on('ready', setup);

server.on('clientConnected', function(client) {
  console.log('client connected', client.id);
});

// fired when a message is received
server.on('published', function(packet, client) {
  console.log('Published', packet.payload.toString());
});

// fired when the mqtt server is ready
function setup() {
  console.log('Mosca server is up and running')
  function ping() {
    var message = {
      topic: 'ground/water',
      payload: 'abcde', // or a Buffer
      qos: 0, // 0, 1, or 2
      retain: false // or true
    };

    server.publish(message, function() {
      console.log('done!');
    });

    console.log('ping..');

    setTimeout(ping, 10000);
  }

  ping();
}
Из зависимостей: необходимы [inline]nodejs[/inline] и [inline]mosca[/inline], но впрочем, можно тестировать на любом доступном брокере.

Библиотека все еще дорабатывается, поэтому рекомендую пока использовать ее в образовательных целях.
 
Последнее редактирование:

Foutnain

New member
Идея хорошая, но почему-то кажется знакомой.

По мониторингу и логированию данных уже есть ThingSpeak
По мониторингу-управлению запустился надавно Blynk

Разработчик имеет возможность скачать прошивку для такого устройства и прошить ею ESP
Вот это минус для простого контроллера, которое пользователь должен взять и использовать. Нужно вводить поддержку всех устройств из коробки — не сильно усложнит программу.

Пока нет никакой особенности в вашей идее. Лишь попытка сделать проще жизнь гиков-чайников? По хорошему контроллер должен только отдавать на хостинг json (например) строку с показаниями датчиков и т.п., и прнимать команды. А реализация интерфейса на стороне сервера или вообще полность на JS на стороне клиента.
 
Последнее редактирование:

jmms

Moderator
Команда форума
Идея хорошая, но почему-то кажется знакомой.

По мониторингу и логированию данных уже есть ThingSpeak
По мониторингу-управлению запустился надевно Blynk


Вот это минус для простого контроллера, которое пользователь должен взять и использовать. Нужно вводить поддержку всех устройств из коробки — не сильно усложнит программу.

Пока нет никакой особенности в вашей идее. Лишь попытка сделать проще жизнь гиков-чайников? По хорошему контроллер должен только отдавать на хостинг json (например) строку с показаниями датчиков и т.п., и прнимать команды. А реализация интерфейса на стороне сервера или вообще полность на JS на стороне клиента.
Да. Принципиально нового в том что я написал - определенно нет. Основную идею вы уловили: сделать проще работу с МК для людей, которые 2 дня назад узнали что такое ESP и захотели прицепить на него датчик да и вывести куда ни будь данные. Есть желание сделать Open Source "коробку", когда другой разработчик берет библиотеку и уже имеет возможность общаться с готовым сервисом без дополнительных настроек.

По поводу МК, как REST-сервера - да, подход верный и оправдан. Даже в чем то может быть и проще. :)

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

Foutnain

New member
Поделка необходима лично мне, я просто делюсь информацией с сообществом, нравится мне так работать - люди со стороны всегда лучше видят то, что не вижу я.
А критика - это всегда хорошо.
Я очень новичок в этом деле, так что никакой критики, просто мысли вслух :)
Поделка в любом случае интересна, код у вас очень приятный, на сколько я могу оценить!
 
  • Like
Реакции: jmms

jmms

Moderator
Команда форума
Доброго времени суток.

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

Приложение состоит из:
  • регистрация (достаточно упрощенная)
  • профиль пользователя
  • раздел с табличным представлением полученных данных
  • раздел с представлением данных в виде графиков
Сервис пока ничем супер-инновационным (ведь все любят это слово) похвастаться не может. Даже меньше, это почти аналог того, что предлагает ThingSpeak. Что то сделано проще, чего то не хватает, где то работает приятней. Но есть желание делать следующее:
  • чтобы проект изначально и дальше был адаптирован для мобильных браузеров (включая отрисовку графиков)
  • исчерпывающая документация
  • всегда в открытом доступе, включая сервер
  • мультиязычность, включая русский и английский переводы
  • контролы (или виджеты или формы) для управления устройством (отправки данных в устройство, помнить состояние, синхронизация состояния с устройством)
  • сделать возможным общение сервер-устройство по MQTT и обновление данных в графиках через Socket, что должно приблизить к отображению данных в реальном времени
Некоторые характеристики текущей версии:
  • сервер NodeJS
  • база данных MongoDB
  • разделен на API и One-page App
  • Twitter Bootstrap, jQuery (решил не заморачиваться и взял самое доступное)
  • новые данные добавляются через POST запрос, но в GET-стиле /data?temperature=300&light=120
  • графики обновляются каждые 10 секунд, если есть новые данные
  • добавление новых полей для вывода информации упрощено, просто нужно добавить новый параметр в POST запрос для данных, добавить к графику это поле
Дальше почти все экраны из панели управления:


По поводу прошивки для устройств - я подумал, почитал мнения и решил, что скетча-примера для отправки данных будет достаточно. Это не будет отдельной библиотекой или прошивкой. Но, думаю, кое какие варианты скетчей: простой, средний и сложный будут.

Продолжаю заниматься. Когда это все появится в общем доступе - обязательно дам знать. :)
 
Последнее редактирование:

jmms

Moderator
Команда форума
Доброго времени суток.

Запустил сервис по адресу: http://charttty.ml/

Окончательное название пало на Сharttty, но название не главное и может меняться как угодно в будущем. :) Пока вся функциональность сводится к отрисовке графиков, так пусть же он так и называется - chart.

Код сейчас крутится на сервере за 6$/год, который находится где то очень далеко, домен бесплатный. Но для тестов этого более чем достаточно. То есть сайт в таком режиме (с дешевым VPS и бесплатным доменом) теоретически может проработать год. Поэтому пока вопросы о покупке чего ни будь более дорогого будут только в том случае, если сервер перестанет тащить посетителей и данные. А это еще нужно выяснить.

Впрочем, если все таки кого ни будь заинтересовал сам сервис, пожалуйста - код в открытом доступе находится по адресу: https://github.com/jmas/charttty (лицензия MIT). Поэтому разворачивайте на здоровье.

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

Сейчас главная задача выяснить пределы, сколько точек может потянуть браузер, поэтому я сознательно отключил лимит по данным в графиках и на странице данных (Data). Пробуйте, пишите когда начнет тормозить страница с отчетами - проверю ваш аккаунт.

Мониторинг прицепил от Гугла, поэтому примерно буду знать посещаемость. Опять таки, о каких либо проблемах с сервером - пишите сюда.

Документации и русского перевода пока нет. Из документации пока попап с описанием как отправить данные. Я буду мониторить ваши вопросы и потихоньку буду добавлять в документацию новые разделы и ответы на вопросы. Перевод на русский будет со дня на день. :) Но а на самом деле очень скоро.

Пока все, пишите если вам интересен сервис, может быть хотите чтобы появились какие ни будь "фичи". Подумаем и напишем.
 

jmms

Moderator
Команда форума
Update.
Из плохого: сервер слабенький, нагрузку держит плохо, поэтому случаются переодические падения NodeJS. Этот язык хорош в плане поддержки большого количества соединений, но очень нестабилен при минимуме знаний о развертывании проекта на продакшене. Но все постигаем постепенно.
Из хорошего: повысил стабильность, установил лимит на количество данных, теперь их максимум 100 (100 точек), если отправлять данные с частотой 1 раз в минуту, то тамлайн получится на час с лишнем. Не густо, но пока я выясняю причины нестабильной работы - этого может быть, в принципе, достаточно. Слегка обновил страницу входа.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Это Open-Source сервис для построения графиков по данным из ваших устройств.
А разве есть какие-то проблемы с Web, генерацией xml, графиками на java или swf, логирования данных в Flash и т.д. у ESP8266 без сторонних устройств?
Вот этот MALine.swf спокойно влезает в модуль ESP-01 со стандартной flash, а если поставить 16M, то в Web-диск влезают всё виды графиков...
 

jmms

Moderator
Команда форума
@pvvx Да, это однозначно хорошие либы. Но я например хочу получать информацию с двух и более устройств и сравнивать все в одном графике.
 

pvvx

Активный участник сообщества
@pvvx Да, это однозначно хорошие либы. Но я например хочу получать информацию с двух и более устройств и сравнивать все в одном графике.
Так-же и решается. У графика делается запрос к данным с нескольких устройств или существует главный, собирающий данные, модуль.
Лучшее решение - использование распределенной сети на роутерах. Минимальная зависимость от внешних сервисов, минимальный внешний трафик, минимальная стоимость и соотношение потребления энергии, плюс максимальная защищенность данных. Соединения между ними могут быть ограниpованы с VPN.
Или Charttty разрабатывается для народного мониторига по типу http://narodmon.ru/#!about ?
 
Последнее редактирование:

jmms

Moderator
Команда форума
@pvvx Без сомнения, все что вы привели правильно и я сам бы пользовался, прийди мне идея использовать Flash плагины. Есть несколько но:
1) у меня экосистема OS X+iPhone, где Flash и Java не работают без костылей и лишних телодвижений (есть тенденция к выпиливанию таких расширений и в хроме, Java например уже все) 2) хочется иметь монитор как раз на удаленном сервере без дополнительных железок в виде проброса данных через Raspberry PI или продвинутого роутера с OpenWRT, но и "стоимость" таких решений для новичков повышается (если делать по-уму, я конечно за такие решения). 3) защищенность данных пока не сильно актуальна лично для меня. Есть решение ThingSpeak (я делал в чем то кальку с него), но хочется, например, видеть в сервисе что то свое (интерфейс или начать управлять устройством с сервиса), прийдется убеждать создателей ThingSpeak включать эти фичи.
И сервис для начинающих, которые не знают "как правильно". Собственно я сам разбираюсь. :)

norodmon.ru - хороший сервис, но изначально я совершенно не думал о нем. Сервис я делаю OpenSource, думаю о публичном API и публичных графиках, поэтому можно будет сделать на базе charttty что то в духе narodmon, но скорей всего это будет чем то отдельным.
 
Последнее редактирование:

pvvx

Активный участник сообщества
решений для новичков
Вот в этом пока плохо. Ещё нет глобально поддерживаемых всеми устройствами стандартов и протоколов для систем по типу IoT.
Не владеющим спец. знаниями "собрать из кубиков" ничего не представляется возможным. Нет ни кубиков, ни поддержки их в сети. А на повестке дня увеличение объемов данных и их комплексная обработка.
Имеющийся народный монитор страдает тем, что там мало данных, нет связи с другими источниками и никакого анализа - нет возможности построения корреляций и прочего (типа построения по триангуляции точек источников хоть температуры), да сплошные кривые и не точные датчики, с данными раз в час.
(и такой обработки не будет - запретят на гос.уровне :p проверенно. Надо ждать пробивки таких тем от гигантов типа google... С ними сложно бороться чиновникам :) )
 
Последнее редактирование:

jmms

Moderator
Команда форума
@pvvx Наверное я не правильно объяснил "сравнение данных от устройств". Я имел ввиду, что таблица данный (в рамках личного аккаунта) в Charttty формируется общая для всех приходящих данных. Можно настроить 2 устройства на отправку данных в сервис (например, это будет температура в комнате и на балконе) и смотреть разницу на одном графике. Это не инновация никакая, можно тоже самое сделать и в ThingSpeak, но я не строил планов по мониторингу данных в глобальных масштабах, мне просто нужен сервис который будет это делать, который будет удобен, который потенциально может стать связующим звеном для других сервисов.
 
Последнее редактирование:

jmms

Moderator
Команда форума
Update.
Добавил перевод на русский.
Даты в графиках и на странице данных еще не переведены.
 

Oakim

New member
Отличная вещь, но в ней мне многого не хватает :-( Я занимаюсь АСУТП и хочется свою маленькую автоматизацию, но то что есть сейчас открытого либо убого либо избыточно :-( Пока смотрю в сторону OpenHAB но там какие то убогие графики, короче пока в поиске корневого узла.
Если вы всерьез собираетесь развивать свой проект, то придется очень многое добавить.
Советую сразу озаботиться архивированием данных, пока маленький проект, вроде все бегает, а когда накопиться инфа по нескольким тысячам датчиков да еще и за несколько лет, переезжать будет поздно.
 
Сверху Снизу