RegisterPropertyString("DeviceID", ""); } public function ApplyChanges() { parent::ApplyChanges(); // MQTT-Server verbinden $this->ConnectParent("{7F8A48DD-F8AD-4F9C-8E6B-9E4D92DDB8F9}"); // Status prüfen if ($this->ReadPropertyString("DeviceID") == "") { $this->SetStatus(104); } else { $this->SetStatus(102); } } /** Wird vom MQTT Server aufgerufen */ public function ReceiveData($JSONString) { $data = json_decode($JSONString, true); // Beispiel MQTT-Datenformat: // [ // "Topic" => "...", // "Payload" => "..." // ] if (!isset($data["Topic"]) || !isset($data["Payload"])) { return; } $topic = $data["Topic"]; $value = $data["Payload"]; IPS_LogMessage("Int_VGT", "MQTT RX: $topic → $value"); $this->HandleIncoming($topic, $value); } /** Deine Logik */ private function HandleIncoming(string $topic, string $value) { $deviceID = $this->ReadPropertyString("DeviceID"); $gateway = $this->InstanceID; // Feedback Request if ($topic === "feedback-request/$deviceID") { $response = json_encode([ "status" => "ok", "timestamp" => time() ]); $this->Publish("feedback-response/$deviceID", $response); return; } // Remote Control if ($topic === "remote-control-response/$deviceID") { $this->Publish("remote-control-feedback/$deviceID", $value); return; } } /** MQTT Publish Wrapper */ private function Publish(string $topic, string $payload) { $msg = [ "Topic" => $topic, "Payload" => $payload, "Retain" => false, "QoS" => 0 ]; $this->SendDataToParent(json_encode(["DataID" => "{7F8A48DD-F8AD-4F9C-8E6B-9E4D92DDB8F9}", "Packet" => $msg])); } } ?>