ConnectParent('{C6D2AEB3-6E1F-4B2E-8E69-3A1A00246850}'); } public function ApplyChanges() { parent::ApplyChanges(); $this->ConnectParent('{C6D2AEB3-6E1F-4B2E-8E69-3A1A00246850}'); // Topic Definitionen $requestTopic = 'feedback-request/deviceOne'; // 1. Filter setzen: Wir wollen nur Nachrichten für unser Request-Topic sehen. // Das "Topic" im Filter bezieht sich auf das JSON-Paket vom MQTT Client. $this->SetReceiveDataFilter('.*"Topic":"' . preg_quote($requestTopic, '/') . '".*'); // 2. Beim MQTT Broker abonnieren (Subscribe senden) // Wir prüfen erst, ob wir einen Parent haben, um Fehler zu vermeiden if ($this->HasActiveParent()) { $this->Subscribe($requestTopic); } } /** * Wird aufgerufen, wenn der Parent (MQTT Client) Daten empfängt */ public function ReceiveData($JSONString) { $data = json_decode($JSONString, true); $this->SendDebug('ReceiveData', $JSONString, 0); if (!isset($data['Topic']) || !isset($data['Payload'])) { return; } // Sicherheitscheck: Ist es wirklich das gewünschte Topic? if ($data['Topic'] === 'feedback-request/deviceOne') { $this->SendDebug('VGT_Logic', 'Request received. Sending "Hello"...', 0); // Antwort senden $this->Publish('feedback-response', 'Hello'); } } /* --------------------------------------------------------- * MQTT HILFSFUNKTIONEN * ---------------------------------------------------------*/ private function Subscribe(string $topic) { $payload = [ 'DataID' => self::PARENT_GUID, 'PacketType' => 3, // Achtung: Symcon intern ist Subscribe oft mapped, // aber für den MQTT Client ist es Type 3 (Publish) oder spezial. // Standard Symcon MQTT Client nutzt jedoch oft Type 8 für Subscribe. // Hier nutzen wir den Standard Weg für JSON DataID: ]; // Sende Subscribe Paket (Type 8 = Subscribe beim Client Splitter) $this->SendDataToParent(json_encode([ 'DataID' => self::PARENT_GUID, 'PacketType' => 8, 'QualityOfService' => 0, 'Retain' => false, 'Topic' => $topic, 'Payload' => '' ])); $this->SendDebug('MQTT', "Subscribed to $topic", 0); } private function Publish(string $topic, string $payload) { // Sende Publish Paket (Type 3 = Publish) $this->SendDataToParent(json_encode([ 'DataID' => self::PARENT_GUID, 'PacketType' => 3, 'QualityOfService' => 0, 'Retain' => false, 'Topic' => $topic, 'Payload' => $payload ])); $this->SendDebug('MQTT', "Published to $topic: $payload", 0); } } ?>