RegisterPropertyFloat("E_PNB_5M_0", 0); $this->RegisterPropertyInteger("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", 10000);//Alle 10 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; $this->SendJsonToInfluxDB($fullURL, $json); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Keine Aufzeichnung im Influx: Anlagenummer oder JSON-Daten fehlen->GetAction()"); } } 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" => $netzbezug, ] ]; // Array in JSON konvertieren $json = json_encode($data); // JSON zurückgeben oder weiterverarbeiten return $json; } private function SendJsonToInfluxDB($url, $json) { // $token = "Token iFNTONC5UvST8GT5itWqxiO6m4O1yHt5hus54J8eqotk5IZiq0Wjd0_Xi6dozmo32QR3esJqk6hJAvJ8X2SxtQ=="; /* if (empty($token)) { IPS_LogMessage("Belevo_Server_Kommunikation", "InfluxDB-Token fehlt->SendJsonToInfluxDB"); return; }*/ $options = [ 'http' => [ 'header' => "Content-Type: application/json\r\n". "daten: $json". "id: test\r\n", 'method' => 'POST', ], ]; $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->SendJsonToInfluxDB()"); } else { IPS_LogMessage("Belevo_Server_Kommunikation", "Daten erfolgreich an Influx gesendet->SendJsonToInfluxDB()"); } } } ?>