UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[Frage] Wie in script von Influx einen Maximalwert abfragen?

Alles rund um die Timberwolf Server APP "WireGate Plugin" mit der Laufzeitumgebung für WireGate Server Plugins
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
koend
Reactions:
Beiträge: 31
Registriert: So Okt 06, 2019 3:44 pm
Hat sich bedankt: 16 Mal
Danksagung erhalten: 7 Mal

Wie in script von Influx einen Maximalwert abfragen?

#1

Beitrag von koend »

Hallo,

hatte auf meinen Wiregate ein prima funktionierendes Script für die Gartenberegnung laufen. Das benötigt allerdings direkten Zugriff auf die rrd-Datenbanken für die Erdtemperatur und -feuchtigkeit (siehe unten).

Wie kann ich nun von einem wiregate script auf die entsprechenden Influx-Datenbanken zugreifen? Ich bräuchte einen Maximalwert aus den letzten 24 Stunden.

Oder als Alternative, wie kann ich einen Logikbaustein bauen, der getriggerd durch ein knx_read() den entsprechenden Wert zurückgibt.
Und nein, ich habe keine Zeit und Lust mich in den Logikeditor einzuarbeiten. Dafür stecken zuviele Mannmonate in meinen scripts.

Vielen Dank und viele Grüße

Code: Alles auswählen

my $rrdPath = "/var/www/rrd/";
my $humidityLeftFile= $rrdPath."GardenHumiLeft.rrd";
my $humidityRightFile= $rrdPath."GardenHumiRight.rrd";
my $temperatureLeftFile= $rrdPath."GardenTempLeft.rrd";

my ($result_arr,$xsize,$ysize) = RRDs::graph($temperatureLeftFile,
	'DEF:v='.$temperatureLeftFile.':GardenTempLeft:AVERAGE',
	'VDEF:vm=v,MAXIMUM',
	'PRINT:vm:%lf'
);
<TWS details removed by Privady Badger> ;)
Benutzeravatar

Chris M.
Reactions:
Beiträge: 1190
Registriert: Sa Aug 11, 2018 10:52 pm
Wohnort: Oberbayern
Hat sich bedankt: 234 Mal
Danksagung erhalten: 853 Mal
Kontaktdaten:

#2

Beitrag von Chris M. »

Die Login-Credentials werden auf der TWS-Portainer-Seite beim Klick auf das (i) hinter "Wie Sie aus dem Docker Container auf die Zeitreihen-Datenbank zugreifen können" angezeigt.
Damit kannst Du nun eine Query an die InfluxDB absetzten die genau das beantwortet, das ist alles HTTP, sollte als Perl auch hin bekommen.
CometVisu Entwickler - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

CometVisu Fragen, Bugs, ... bitte im Entwicklungs-Forum, hier nur spezifisches für CV<->Timberwolf.

TWS 2500 ID: 76 + TP-UART - VPN offen, Reboot nur nach Absprache

Ersteller
koend
Reactions:
Beiträge: 31
Registriert: So Okt 06, 2019 3:44 pm
Hat sich bedankt: 16 Mal
Danksagung erhalten: 7 Mal

#3

Beitrag von koend »

Danke Chris.

Klinkt in erster Instanz enorm logisch, Brett vor'm Kopf bei mir.

Kriege ich praktisch allerdings nicht hin:
- Debian hat kein package für Influx::HTTP
- cpan läuft auf dem plugin container nicht durch (wie schon durch andere angemerkt, die sich dann aber mit einem Debian package behelfen konnten)

Also drohen leider lange Abende und Wochenenden um mich in den kontra-intuitiven Logikeditor einzuarbeiten, die ich lieber auf andere Dinge verwenden würde. So technisch schön der auch sein mag, er ist der folgende vendor lock-in nach den plugins...
Zuletzt geändert von koend am Sa Apr 25, 2020 12:14 am, insgesamt 1-mal geändert.
<TWS details removed by Privady Badger> ;)
Benutzeravatar

Chris M.
Reactions:
Beiträge: 1190
Registriert: Sa Aug 11, 2018 10:52 pm
Wohnort: Oberbayern
Hat sich bedankt: 234 Mal
Danksagung erhalten: 853 Mal
Kontaktdaten:

#4

Beitrag von Chris M. »

Du denkst zu kompliziert. Mach es einfach zu Fuß. Also einfach einen "normalen" HTTP-Request absetzen und die Antwort dann selber verarbeiten.

Eigentlich wollte ich Dir als Beispiel geben wie es die CometVisu macht (https://github.com/CometVisu/CometVisu/ ... xfetch.php) - aber ich habe gerade gesehen, dass es für eine so simple Aufgabe schon wieder viel zu komplex ist, da dort ja eine Abfrage dynamisch zusammen gebaut wird und Dir ja eine simple statische Abfrage reicht.
Aber eigentlich reicht hier die InfluxDB-Doku vollkommen aus: https://docs.influxdata.com/influxdb/v1 ... uery_data/
CometVisu Entwickler - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

CometVisu Fragen, Bugs, ... bitte im Entwicklungs-Forum, hier nur spezifisches für CV<->Timberwolf.

TWS 2500 ID: 76 + TP-UART - VPN offen, Reboot nur nach Absprache

Ersteller
koend
Reactions:
Beiträge: 31
Registriert: So Okt 06, 2019 3:44 pm
Hat sich bedankt: 16 Mal
Danksagung erhalten: 7 Mal

#5

Beitrag von koend »

Kompliziert kann ja auch nicht jeder... ;)

Vielen Dank für die Hinweise, die halfen nicht nur, sondern waren essentiell.

Mit Dank an viele andere Autoren (und Google) hier das Ergebnis:

Code: Alles auswählen

my $url = 'https://172.17.0.1/proxy/ts/query';
my $user = 'docker';
my $passwd = '<see TWS>';
my $timeseries = 'TS00005';

use HTTP::Response;
use LWP::UserAgent;
use URI::URL;
use MIME::Base64;
use URI::Encode qw(uri_encode);;
use JSON;

my $query = 'SELECT max(*) FROM '.$timeseries.' WHERE time > now() - 25h';

# for debugging add &pretty=true
$url = $url.'?db=timeseries_db&q='.uri_encode($query);
my $header = ['Content-Type' => 'application/vnd.flux', 'Authorization' => 'Basic '.encode_base64($user.':'.$passwd)];

my $request = HTTP::Request->new( 'GET', $url, $header);
my $ua = LWP::UserAgent->new(
  ssl_opts => { 
  		verify_hostname => '0',
  		SSL_verify_mode => '0'},
);
$ua->agent("hcat/1.0");

my $response = $ua->request($request);

plugin_log('5 ---------------------------------------------------');
my $maxTemp=decode_json($response->content)->{results}->[0]->{series}->[0]->{values}->[0][1];

plugin_log('max:'.$maxTemp);
<TWS details removed by Privady Badger> ;)

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#6

Beitrag von Robert_Mini »

Hallo Koend!

Super Sache! Kann mir vorstellen, dass dies ein Knochenjob war, aber dies eröffnet nun tolle Möglichkeiten!

Darf ich das als kurzen Artikel in die KB aufnehmen?

Danke und lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
koend
Reactions:
Beiträge: 31
Registriert: So Okt 06, 2019 3:44 pm
Hat sich bedankt: 16 Mal
Danksagung erhalten: 7 Mal

#7

Beitrag von koend »

Moin,

kannst du gerne aufnehmen, ja.

Knochenjob war OK, bis auf die nested data structures in Perl ganz am Ende...
<TWS details removed by Privady Badger> ;)

StefanW
Elaborated Networks
Reactions:
Beiträge: 9689
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4831 Mal
Danksagung erhalten: 7632 Mal
Kontaktdaten:

#8

Beitrag von StefanW »

Hallo koend,

super Sache, danke sehr für das teilen mit uns.

==> Sehe ich das richtig, das ist ein PERL-Script für die Plugin-UMgebung im "WireGate Plugin-Container" im Timberwolf Server?

Könntest Du noch bitte Deinen Footer auf Forenstandard bringen: viewtopic.php?f=8&t=331?


Merci

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Antworten

Zurück zu „Timberwolf APP: WireGate Plugin Laufzeitumgebung“