Graphing data

I use Grafana, which comes as a Cloud Based solution or you can run it on your own server which is what I do. The Server version is free, but you can buy it and use it for more commercial purposes.

Once you have connected your DB to Grafana you can create queries to populate the graphs.

House_Analytics_-_Grafana

1 Like
  • PowerBI is included in Office Enterprise for the cloud version, but you can use PowerBI desktop for free.
  • Google Data Studio is cloud based, but free of charge
  • Grafana is cloud based (paid subscription) or you can run it on your own server as mentionned by @JimK
  • Thingsboard is free to use and download (community version) or you can go with the pro version
  • Cyfe had a free version in the past (cloud based), but I don’t think this is still the case
1 Like

Thanks guys.

I have set up a Grafana account but it does not seem to have any way to connect to TTN or to the Swagger db I have integrated with TTN for data archiving. What am I missing here?
Is it not possible to query the Swagger db or do I need to do something else first?

You wouldn’t be connecting Grafana to the TTN. TTN is a transport system.

You should connect Grafana directly to the DB and then query the DB from Grafana.

I’m not familiar with Swagger, I thought it was more of an API capability rather than a DB. So I’m going to struggle to help you on that front. I essentially use the Grafana MySQL plugin to provide the datasource for my Grafana data.

Thanks Jim,

That may be what I am missing here.

As far as I know, the only system that support “natively” TTN is Thingsboard PE (https://thingsboard.io/docs/user-guide/integrations/ttn/).

Well that’s another 2 hours lost forever - spent it trying to get Influx DB working but it goes down one rabbit hole after another with endless plug ins and what not with almost no documentation nor ever any sight of an obvious path. Can it really be this hard to draw a simple graph?..asking myself really…Is the Grafana mySQL plugin a reasonable way to resolve this perhaps?

Hi @Qmick, Ubidots is very good for fast, easy and simple graphing, etc. It’s not free but there are free trial periods. The TTN integration works well.
https://www.ubidots.com/

Hi Qmick,
it deppends what you want, your skills and your butget.

AllThingsTalk Maker ttn intergration is easy and free.

For free, you can also install Grafana, pass your data into a database (eg with TTN http intergration-this need some work) and have some pretty dashboards. Grafana can update data automatically. You will need a static ip.

If you like to make an application with your data, i think that you have to make everything from scratch in order to be super flexible.

Thanks. I looked at UBI Dots and it’s $49/Mth which is out of my league.

Thanks. I set up an account with AllThingsTalk Maker. I even created a pinboard which was connected to TTN (allegedly) but nothing ever showed up. So that’s another fail. I don’t think this stuff has a future…

What stuff are you referring to?

Hi @Qmick, I think that “free” does not have a future. Either you have to pay with your own time and skills and make stuff or you have to pay with money for other people’s time and skills.

This topic has offered you both options - pay with time or pay with money - it seems that you reject both of those. There’s an old Chinese saying; “a peasant will stand for a long time on a hillside with his mouth open before a roast duck flies in”.

1 Like

Have another look at ThingSpeak. There is now an integration from TTN. ThingSpeak provides 4 channels (8 fields each) free. Graphing is the default. Can’t speak highly enough of ThingSpeak, stores the data forever(![?]) unlike most of the other services.

Thanks Andrew. I made some progress with Thingspeak to the point it seems to know it is connected to my TTN device but after that its all a bit of a blank and there is no clear path from this to getting the data into a graph etc. I am re reading the documentation on this but its pretty dense and confusing material and far from point and click. How did you get it to work for you…? Was it TTN Byte data you were reading?

Thanks Tim. I will remember that one…

I can send you my Arduino code for a moisture sensor. It uses TheThingsNetwork library. Within TTN you have to decode the byte message (it’s only 8 lines of code for a couple of fields - again I can supply) and then you just add the ThingSpeak integration and tell it what channel and fields to use. There’s your graph. PM me your email address and I will send you the files.

Thanks Andrew, that’s very kind. I have a set of fields already posting to TTN and decoding using a TTN decode script and they look correct in TTN. Question here: does your Thingspeak configuration reference your TTN data using the field names in the TTN decoder script? It occurs to me I have not tried that and it may prove the key to making it work.

Well I got that sorted out on Thingspeak finally. I had some trouble getting it to actually show the data - and that’s because it actually requires you to rename your TTN decoded values to say field1, field2 etc instead of the more useful names you might have chosen for them in the decoder - seems like a poor design decision to me as it renders the TTN dashboard very hard to read and it took a while to figure it out as it is a bit non-intuitive - to me anyway. Notwithstanding that it works well enough so far. Thanks for the help.

Glad you got it working. I’ve always just used the default Fieldn names, as these were in the first example I copied from the clever people at Sodaq. Their Arduino code sets up labels in the definitions section- if you did this you could call Label1 etc anything you want.

Definitions:
//Data labels, cannot change for ThingSpeak
#define LABEL1 “field1”
#define LABEL2 “field2”
#define LABEL3 “field3”

Later on you construct the url string:
`//Add key followed by each field
url += String(FIRST_SEP) + String(“key”);
url += String(LABEL_DATA_SEP) + String(WRITE_API_KEY);

url += String(OTHER_SEP) + String(LABEL1);
url += String(LABEL_DATA_SEP) + String(bme.readTemperature());

`