RegisterPropertyFloat("E_PNB_5M_0", 0); $this->RegisterVariableFloat("Netzbezug", "Netzbezug", "",0); /*//Boilerstatus $this->RegisterPropertyInteger("G_BS_5M_0", 0); $this->RegisterVariableInteger("Boilerstatus", 0); //Boilertemperatur $this->RegisterPropertyFloat("G_BT_5M_0",0); // Wird an Influx Server gesendet $this->RegisterVariableFloat("Boilertemperatur", 0); // Ist, Jetzige Boilertemperatur //Schaltkontake des Boilers $this->RegisterPropertyInteger("G_SK_5M_1",0); $this->RegisterVariableInteger("Schaltkontakt_1", 0); $this->RegisterPropertyInteger("G_SK_5M_2",0); $this->RegisterVariableInteger("Schaltkontakt_2", 0); //Schaltkontake des Boilers $this->RegisterPropertyInteger("G_SK_5M_3",0); $this->RegisterVariableInteger("Kontakt_Teillast", 0); $this->RegisterPropertyInteger("G_SK_5M_4",0); $this->RegisterVariableInteger("Kontakt_Volllast", 0); //Wärmepumpe Status $this->RegisterPropertyFloat("G_WPS_5M_0",0); $this->RegisterVariableInteger("Waermepumpe_Status", 0); //Wolkenwahrscheinlichkeit $this->RegisterPropertyFloat("G_WW_5M_0",0); $this->RegisterVariableInteger("Wolkenwahrscheinlichkeit", 0); //Aussentemperatur $this->RegisterPropertyFloat("G_AT_5M_0",0); $this->RegisterVariableInteger("Aussentemperatur", 0); */ $this->RegisterPropertyString("BaseURL","https://brain.belevo.ch/status?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", 300000); } else { // Timer stoppen $this->SetTimerInterval("Timer_Influx", 0); } } public function RequestAction($Ident, $Value) { switch ($Ident) { case "GetAction": $this->GetAction(); break; default: throw new Exception("Invalid action"); } } public function GetAction() { $jaNeinAuswahl = $this->ReadPropertyBoolean("JaNeinAuswahl"); if ($jaNeinAuswahl) { $json = $this->MakeJson(); $baseURL = $this->ReadPropertyString("BaseURL"); $anlagenummer = $this->ReadPropertyString("Anlagenummer"); // Kombiniere die URL mit der Anlagenummer $fullURL = $baseURL . $anlagenummer; $this->SendJsonToInfluxDB($fullURL, $json); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Keine Aufzeichnung im Influx"); } } public function MakeJson() { /* $boilertemperatur = $this->GetValue("Boilertemperatur"); $this->SetValue("G_BT_5M_0", $boilertemperatur); $kontaktTeillast = $this->GetValue("Kontakt_Teillast"); $this->SetValue("G_SK_5M_3", $kontaktTeillast); $kontaktVolllast = $this->GetValue("Kontakt_Volllast"); $this->SetValue("G_SK_5M_4", $kontaktVolllast); */ $netzbezug = $this->GetValue("Netzbezug"); $this->SetValue("E_PNB_5M_0", $netzbezug); // Werte in ein Array packen $data = [ "_measurement" => $this->ReadPropertyString("Anlagenummer"), "_field" =>[ //"G_BT_5M_0" => $this->GetValue("G_BT_5M_0"), //"G_SK_5M_3" => $this->GetValue("G_SK_5M_3"), //"G_SK_5M_4" => $this->GetValue("G_SK_5M_4"), "E_PNB_5M_0" => $this->GetValue("E_PNB_5M_0"), ] ]; // Array in JSON konvertieren $json = json_encode($data); // JSON zurückgeben oder weiterverarbeiten return $json; } private function SendJsonToInfluxDB($url, $json) { $token = "iFNTONC5UvST8GT5itWqxiO6m4O1yHt5hus54J8eqotk5IZiq0Wjd0_Xi6dozmo32QR3esJqk6hJAvJ8X2SxtQ=="; $options = [ 'http' => [ 'header' => "Content-Type: application/json\r\n". "Authorization: Bearer $token\r\n", 'method' => 'POST', 'content' => $json, ], ]; $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($result === FALSE) { IPS_LogMessage("Belevo_Server_Kommunikation", "Fehler beim senden an Influx"); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Daten erfolgreich an Influx gesendet"); } } } ?>