Stats4Lox::lox2telegraf

my ($status, @queue) = lox2telegraf( \@data, $nosend );


Creates an array with InfluxDB line format protocol lines of all submitted values. Data can be send to telegraf directly.   
The first parameter is the Data as an Array of Hashes (see below). This is mandatory.

The second parameter can be set to 1 if you do not want to send the data to telegraf and just return the prepared array. If set to 0, data will be send to telegraf (Default). This is optional.

Parameter

ParameterRequiredBeschreibung
\@data Array of Hashes with data (see below)
$nosend Toogle to suppress sending data to telegraf (1). Default is 0 and sending data to telegraf.

Return value

Parameter Description
1. return Status
2. retutrnArray with text in Influx line protocol


The first return value is the status of the function: 

  • (0) Data was prepared and send
  • (1) Data was prepared but not send
  • (2) an error occurred.

The second return value is an array with the text in Influx line protocol. It can be send to influx using the HTTP API or the command line interface: https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_tutorial/#getting-data-in-the-database

A function call will looks like this:

my ( $status, @queue ) = lox2telegraf( \@data, 0 );

The response looks like this (as an array):

my_measurement,tag1=This\ is\ tag\ 1,tag2=This\ is\ tag\ 2 field1="A\ String",field2=20i,field3=10.2 1616935446000000

Data structure

Datastructure @data must be as follows:

$VAR1 = {
          'timestamp' => '1467360000000000000',
          'msno' => '1',
          'uuid' => '0ad03c43-0102-d583-ffffb70a5529d684',
          'room' => 'UG Hauswirtschaft',
          'type' => 'StateV',
          'category' => "L\x{c3}\x{bc}ftung",
          'source' => 'import',
          'values' => [
                        {
                          'key' => 'Default',
                          'value' => '24.184'
                        }
                      ],
          'description' => "Temperatur Au\x{c3}\x{9f}enluft",
          'measurementname' => "Temperatur Au\x{c3}\x{9f}enluft",
          'name' => "Au\x{c3}\x{9f}entemperatur"
        };
$VAR2 = {
          'name' => "Au\x{c3}\x{9f}entemperatur",
          'description' => "Temperatur Au\x{c3}\x{9f}enluft",
          'values' => [
                        {
                          'key' => 'Default',
                          'value' => '23.450'
                        }
                      ],
          'source' => 'import',
          'measurementname' => "Temperatur Au\x{c3}\x{9f}enluft",
          'room' => 'UG Hauswirtschaft',
          'category' => "L\x{c3}\x{bc}ftung",
          'type' => 'StateV',
          'uuid' => '0ad03c43-0102-d583-ffffb70a5529d684',
          'msno' => '1',
          'timestamp' => '1467361800000000000'
        };

Usage

#!/usr/bin/perl
 
use LoxBerry::System;
require "../Stats4Lox.pm";
 
# Debug
$Stats4Lox::DEBUG = 1;
$Stats4Lox::DUMP = 1;
 
my @data;
my %influxrecord = (
                timestamp => '',
                msno => '1',
                uuid => '11111-11111-11111-1111',
                name => 'Das ist mein Name',
                category => 'Heizung',
                room => 'Keller',
                type => 'Output',
        );
 
my @values;
push @values, { key => 'output1', value => 1 };
push @values, { key => 'output2', value => 2 };
push @values, { key => 'output3', value => 3 };
push @values, { key => 'output4', value => 4 };
push @values, { key => 'output5', value => 5 };
 
$influxrecord{values} = \@values;
 
push @data, \%influxrecord;
 
my $nosend = "0";
my (@response) = Stats4Lox::lox2telegraf( \@data, $nosend );