RegisterPropertyFloat("E_PNB_5M_0", 0); $this->RegisterPropertyInteger("Netzbezug", 0); /*//Boilerstatus $this->RegisterPropertyInteger("G_BS_5M_0", 0); $this->RegisterPropertyInteger("Boilerstatus", 0); //Boilertemperatur $this->RegisterPropertyFloat("G_BT_5M_0",0); // Wird an Influx Server gesendet $this->RegisterPropertyInteger("Boilertemperatur", 0); // Ist, Jetzige Boilertemperatur //Schaltkontake des Boilers $this->RegisterPropertyInteger("G_SK_5M_1",0); $this->RegisterPropertyInteger("Schaltkontakt_1", 0); $this->RegisterPropertyInteger("G_SK_5M_2",0); $this->RegisterPropertyInteger("Schaltkontakt_2", 0); //Schaltkontake des Boilers $this->RegisterPropertyInteger("G_SK_5M_3",0); $this->RegisterPropertyInteger("Kontakt_Teillast", 0); $this->RegisterPropertyInteger("G_SK_5M_4",0); $this->RegisterPropertyInteger("Kontakt_Volllast", 0); //Wärmepumpe Status $this->RegisterPropertyFloat("G_WPS_5M_0",0); $this->RegisterPropertyInteger("Waermepumpe_Status", 0); //Wolkenwahrscheinlichkeit $this->RegisterPropertyFloat("G_WW_5M_0",0); $this->RegisterPropertyInteger("Wolkenwahrscheinlichkeit", 0); //Aussentemperatur $this->RegisterPropertyFloat("G_AT_5M_0",0); $this->RegisterPropertyInteger("Aussentemperatur", 0); */ //$this->RegisterPropertyString("BaseURL","https://brain.belevo.ch/status?nr="); $this->RegisterPropertyString("BaseURL","http://192.168.20.140:5000/influx?nr="); $this->RegisterPropertyString("Anlagenummer",0); $this->RegisterPropertyBoolean("InfluxJaNein", false); $this->RegisterTimer("Timer_Influx", 0, 'IPS_RequestAction(' . $this->InstanceID . ', "GetAction", "");');// 5min = 1000 * 60 * 5 = 300'000ms } public function ApplyChanges() { parent::ApplyChanges(); $InfluxJaNein = $this->ReadPropertyBoolean("InfluxJaNein"); if ($InfluxJaNein) { // Timer auf 5 Minuten setzen $this->SetTimerInterval("Timer_Influx", 5000);//Alle 5 Sekunden IPS_LogMessage("Belevo_Server_Kommunikation", "Influx Ja"); } else { // Timer stoppen $this->SetTimerInterval("Timer_Influx", 0); IPS_LogMessage("Belevo_Server_Kommunikation", "Influx Nein"); } } public function RequestAction($Ident, $Value) { switch ($Ident) { case "GetAction": $this->GetAction(); break; default: throw new Exception("Invalid action"); } } public function GetAction() { $json = $this->MakeJson(); $baseURL = $this->ReadPropertyString("BaseURL"); $anlagenummer = $this->ReadPropertyString("Anlagenummer"); if (!empty($anlagenummer) && !empty($json)) { // Kombiniere die URL mit der Anlagenummer $fullURL = $baseURL . $anlagenummer; IPS_LogMessage("Belevo_Server_Kommunikation", "URL: ".$fullURL); IPS_LogMessage("Belevo_Server_Kommunikation", "JSON: " . $json); $this->SendJsonToInfluxDB($fullURL, $json); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Keine Aufzeichnung im Influx: Anlagenummer oder JSON-Daten fehlen->GetAction()"); } } public function MakeJson() { $netzbezug = GetValue($this->ReadPropertyInteger("Netzbezug")); $an_nummer = GetProperty($this->ReadPropertyString("Anlagenummer")); $InfluxJaNein = $this->ReadPropertyBoolean("InfluxJaNein"); //$this->SetValue("E_PNB_5M_0", $netzbezug); // Werte in ein Array packen $influxData = array( "Value" => array( "InfluxAllowed" => $InfluxJaNein // Setze InfluxAllowed auf true für den Test ), //"Measurement" => $this->ReadPropertyString("Anlagenummer"), "Parameter" => array( "Influxadr" =>$an_nummer ), "Tracker" =array( "E_PNB_5M_0" => $netzbezug ) ); // Array in JSON konvertieren $json = json_encode($data); // JSON zurückgeben oder weiterverarbeiten return $json; } private function SendJsonToInfluxDB($url, $jsonData) { // cURL Initialisieren $curl = curl_init(); // Optionen für cURL-Request definieren curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, // POST-Methode verwenden CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', // Header für JSON-Daten setzen 'Accept: application/json' 'id : test' ], CURLOPT_POSTFIELDS => $jsonData // JSON-Daten als POST-Feld senden ]); // cURL-Request ausführen $result = curl_exec($curl); $error = curl_error($curl); // cURL beenden curl_close($curl); // Logging der Antwort und eventueller Fehler if ($error) { IPS_LogMessage("Belevo_Server_Kommunikation", "Fehler beim Senden an Influx: " . $error); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Antwort von Influx: " . $result); } } } ?>