Sensordata naar InfluxDB

Arduino specifieke Software
Berichten: 2
Geregistreerd: 18 Feb 2017, 09:37

Sensordata naar InfluxDB

Berichtdoor Grijzekop » 18 Feb 2017, 10:03

Hallo,

Ik ben helemaal nieuw op dit forum en ook redelijk nieuw in programmeren van de Arduino. Ik heb wel een programmeerachtergrond in dBase III en Clipper (heel lang geleden, vandaar ook m'n forumnaam 'Grijzekop' :D ).
Wat ik nu heb gemaakt is een opstelling met een Funduino Mega 2560 met een Ethernet shield en daaraan gekoppeld 3 ds18b20 sensors. Daar heb ik een stukje code voor gemaakt door vooral veel over te nemen uit voorbeelden van anderen. Het resultaat is een werkende opstelling waarvan ik de temperatuur van de 3 sensors uitlees en via de seriele monitor op het scherm kan toveren.

Number of Devices found on bus = 3
Getting temperatures...
Probe 01 temperature is: C: 31.50
Probe 02 temperature is: C: 23.50
Probe 03 temperature is: C: 23.50

Maar, en nu komt het probleem, ik wil deze data naar een InfluxDB database sturen en zo via Grafana in een mooie grafiek zichtbaar maken. En daar loop ik vast.
Ik heb een Raspberry Pi met daarop een InfluxDB database "logger" genaamd. Ik probeer data van de Arduino naar de database op de Pi te sturen, maar 't komt niet in de database terecht. In de huidige code maak ik nog gebruik van testdata "POSTData" en dus nog niet van de werkelijke data van de sensors.
Kan iemand mij op weg helpen door aan te geven wat ik fout doe?
Bedankt alvast!

Code: Alles selecteren
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>


#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pins 3 and 4 on the Arduino
#define BUS1 10

/** MAC Address of the ethernet shield */
byte mac_arduino[] = {  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };

/** MAC Address of the ethernet shield */
byte mac_influxdb[] = {  0xB8, 0x27, 0xEB, 0xCB, 0x6B, 0x07 };

/** IP address Ethershield */
IPAddress ip_arduino(192, 168, 1, 44); // BBB

/** Server address wich runs InfluxDB */
IPAddress ip_influxdb(192, 168, 1, 45); // BBB

/** port of the InfluxDB database*/
int port = 8086;

// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(BUS1);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

DeviceAddress Probe01 = { 0x28, 0xFF, 0xB0, 0xB5, 0x85, 0x16, 0x03, 0xE4 };
DeviceAddress Probe02 = { 0x28, 0xFF, 0x44, 0x18, 0x88, 0x16, 0x03, 0x79 };
DeviceAddress Probe03 = { 0x28, 0xFF, 0xFF, 0x18, 0x88, 0x16, 0x03, 0x46 };

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

//data for HTTP Post;
String POSTData = "";

void setup(void)
{
 
/**
 * @brief Starts the ethernet shield as client
 */
  // start the Ethernet connection:
  if (Ethernet.begin(mac_arduino) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac_arduino, ip_arduino);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(ip_influxdb, port)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
 
  // start serial port
  Serial.begin(115200);
 
  sensors.begin();
 
  // set the resolution to 10 bit (Quarter grade, Can be 9 to 12 bits .. lower is faster)
  sensors.setResolution(Probe01, 10);
  sensors.setResolution(Probe02, 10);
  sensors.setResolution(Probe03, 10);
 
  // let the monitor know it's starting
  Serial.println("Starting");
 
 }

void loop()  /****** LOOP: RUNS CONSTANTLY ******/
{

  Serial.println();
  Serial.print("Number of Devices found on bus = "); 
  Serial.println(sensors.getDeviceCount());   
  Serial.print("Getting temperatures... "); 
  Serial.println(); 


  // Command all devices on bus to read temperature 
  sensors.requestTemperatures(); 
 
  Serial.print("Probe 01 temperature is:   ");
  printTemperature(Probe01);
  Serial.println();

  Serial.print("Probe 02 temperature is:   ");
  printTemperature(Probe02);
  Serial.println();

  Serial.print("Probe 03 temperature is:   ");
  printTemperature(Probe03);
  Serial.println();

  // set some test data
  String POSTData = "uCont=" + String(millis());

  // Write data via HTTP:
  client.println("POST /write?db=logger HTTP/1.1");
  client.println("Host:  192.168.1.45:8086");
  client.println("User-Agent: Arduino/1.6");
  client.println("Connection: close");
  client.println("Content-Type: application/x-www-form-urlencoded;");
  client.print("Content-Length: ");
  client.println(POSTData.length());
  client.println();
  client.println(POSTData);

  delay(3000);

  // let the monitor know something is going on in case nothing is returned.
  Serial.println("loop...");

}

 
/*-----( Declare User-written Functions )-----*/
void printTemperature(DeviceAddress deviceAddress)
{

float tempC = sensors.getTempC(deviceAddress);

   if (tempC == -127.00)
   {
   Serial.print("Error getting temperature  ");
   }
   else
   {
   Serial.print("C: ");
   Serial.print(tempC);
   }
}// End printTemperature
//*********( THE END )***********

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Sensordata naar InfluxDB

Berichtdoor Koepel » 18 Feb 2017, 11:37

Je connect in setup() en dan laat je die verbinding open staan ? Over het algemeen wordt in de loop() iedere keer een verbinding gemaakt.
Is het misschien nodig om in te loggen met username en password ?

Soms is het nodig om bepaalde dingen in de header net even iets anders te doen. Dit schijnt een werkend voorbeeld te zijn: https://github.com/jstelwag/InfluxDB/blob/master/InfluxDB.cpp. De "Ethernet.maintain();" die daar staat is waarschijnlijk niet nodig. Ik heb het nog nooit gebruikt.

Berichten: 2
Geregistreerd: 18 Feb 2017, 09:37

Re: Sensordata naar InfluxDB

Berichtdoor Grijzekop » 22 Feb 2017, 20:46

Koepel schreef:Je connect in setup() en dan laat je die verbinding open staan ? Over het algemeen wordt in de loop() iedere keer een verbinding gemaakt.
Is het misschien nodig om in te loggen met username en password ?

Soms is het nodig om bepaalde dingen in de header net even iets anders te doen. Dit schijnt een werkend voorbeeld te zijn: https://github.com/jstelwag/InfluxDB/blob/master/InfluxDB.cpp. De "Ethernet.maintain();" die daar staat is waarschijnlijk niet nodig. Ik heb het nog nooit gebruikt.


Mooi voorbeeld. Ga ik komend weekend proberen. Dank!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten