Metainformationen zur Seite
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
Parameter | Required | Beschreibung |
\@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. retutrn | Array 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 );