
Dazu in der
Code: Alles auswählen
user.config.php
Code: Alles auswählen
$InfluxBucket = "meinbucket";
$InfluxToken = "meinToken";
$InfluxOrg = "meineOrg";
Code: Alles auswählen
funktionen.inc.php
Code: Alles auswählen
/**************************************************************************
// Daten in die remote Influx v2 Datenbank schreiben
//
//
**************************************************************************/
public function influx_remote($daten) {
if (!isset($daten["zentralerTimestamp"])) {
$daten["zentralerTimestamp"] = time();
}
// InfluxDB v2 Parameter prüfen
if (!isset($daten["InfluxBucket"]) || !isset($daten["InfluxToken"]) || !isset($daten["InfluxOrg"])) {
$this->log_schreiben("InfluxDB v2 Parameter fehlen (Bucket, Token oder Org)", " ", 5);
return false;
}
$query = "";
// Statistikdaten übertragen (alle 10 Minuten)
if (date("i") == '00' || date("i") == '10' || date("i") == '20' || date("i") == '30' || date("i") == '40' || date("i") == '50') {
$this->log_schreiben("Alle 10 Minuten werden die Statistikdaten remote übertragen.", " ", 5);
$query = "Statistik Bezeichnung=\"WhTag\",Datum=\"".date('d.m.Y')."\",Woche=".date('W').",Monat=".date('n');
$query .= ",Wochentag=\"".strftime('%A', time())."\"";
$query .= ",Heute_TS=".mktime(0, 0, 0, date("m"), date("d"), date("Y"))."000000000";
$query .= ",Gestern_TS=".mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))."000000000";
$query .= ",DiesesJahr_TS=".mktime(0, 0, 0, 1, 1, date("Y"))."000000000";
$query .= ",LetztesJahr_TS=".mktime(0, 0, 0, 1, 1, date("Y") - 1)."000000000";
$query .= ",DieserMonat_TS=".mktime(0, 0, 0, date("m"), 1, date("Y"))."000000000";
$query .= ",LetzterMonat_TS=".mktime(0, 0, 0, date("m") - 1, 1, date("Y"))."000000000";
$query .= ",DieseWoche_TS=".strtotime("last monday", strtotime("tomorrow"))."000000000";
$query .= ",LetzteWoche_TS=".strtotime("last monday -7 days", strtotime("tomorrow"))."000000000";
$query .= ",TagImMonat=".date("j");
$query .= ",TagImJahr=".(date("z") + 1);
$query .= ",Jahr=".date("Y");
$query .= ",Stunde=".date("G");
$query .= " ".$daten["zentralerTimestamp"];
// InfluxDB v2 URL erstellen
$url = $this->getInfluxV2Url($daten, '/api/v2/write');
$i = 1;
do {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, $daten["InfluxPort"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
// Token-Based Authentication für InfluxDB v2
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Token ' . $daten["InfluxToken"],
'Content-Type: text/plain'
]);
if (isset($daten["InfluxSSL"]) && $daten["InfluxSSL"] == true) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$rc_info = curl_getinfo($ch);
if (curl_errno($ch)) {
$this->log_schreiben("Curl Fehler! Statistikdaten nicht zur entfernten InfluxDB gesendet! Curl ErrNo. ".curl_errno($ch), " ", 5);
}
if ($rc_info["http_code"] == 200 || $rc_info["http_code"] == 204) {
break;
}
elseif ($rc_info["http_code"] == 401) {
$this->log_schreiben("Influx Token ist ungültig oder hat nicht genügend Rechte.", "* ", 5);
break;
}
else {
$this->log_schreiben("InfluxDB Fehler -> nochmal versuchen. HTTP Code: ".$rc_info["http_code"], " ", 5);
$i++;
sleep(1);
continue;
}
$i++;
sleep(1);
} while ($i < 3);
curl_close($ch);
unset($ch);
}
// Hauptdaten übertragen (nur bei Tageslicht oder wenn explizit erlaubt)
if ($this->tageslicht("hamburg") || $daten["InfluxDaylight"] === false) {
$this->log_schreiben("Aktuelle Daten: \n".print_r($daten, 1), " ", 9);
$query = $this->query_erzeugen($daten);
if (isset($daten["ZusatzQuery"])) {
$query = $daten["ZusatzQuery"]."\n".$query;
}
// InfluxDB v2 URL erstellen
$url = $this->getInfluxV2Url($daten, '/api/v2/write');
$i = 1;
do {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, $daten["InfluxPort"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
// Token-Based Authentication für InfluxDB v2
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Token ' . $daten["InfluxToken"],
'Content-Type: text/plain'
]);
if (isset($daten["InfluxSSL"]) && $daten["InfluxSSL"] == true) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$rc_info = curl_getinfo($ch);
if (curl_errno($ch)) {
$this->log_schreiben("Curl Fehler! Daten nicht zur entfernten InfluxDB gesendet! No. ".curl_errno($ch), " ", 5);
}
if ($rc_info["http_code"] == 200 || $rc_info["http_code"] == 204) {
$this->log_schreiben("Daten zur entfernten InfluxDB [ ".$daten["InfluxBucket"]." ] gesendet. ", "* ", 7);
break;
}
elseif ($rc_info["http_code"] == 401) {
$this->log_schreiben("Influx Token ist ungültig oder hat nicht genügend Rechte.", "* ", 5);
break;
}
else {
$this->log_schreiben("InfluxDB Fehler -> nochmal versuchen. HTTP Code: ".$rc_info["http_code"], " ", 5);
$i++;
sleep(1);
continue;
}
$i++;
sleep(1);
} while ($i < 3);
curl_close($ch);
}
return true;
}
Code: Alles auswählen
$aktuelleDaten["InfluxBucket"] = $InfluxBucket;
$aktuelleDaten["InfluxOrg"] = $InfluxOrg;
$aktuelleDaten["InfluxToken"] = $InfluxToken;
