From 8f3ebda3af68707d6d4a8d37e9ec6b6bb1133c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 13 Nov 2025 08:16:38 +0100 Subject: [PATCH] no message --- Int_VGT/module.php | 79 +++++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/Int_VGT/module.php b/Int_VGT/module.php index adad506..40cf740 100644 --- a/Int_VGT/module.php +++ b/Int_VGT/module.php @@ -7,73 +7,108 @@ class Int_VGT extends IPSModule public function Create() { parent::Create(); + $this->RegisterPropertyString("DeviceID", ""); } public function ApplyChanges() { parent::ApplyChanges(); - // Verbindung zur ausgewählten Gateway-Instanz - $this->ConnectParent("{7F8A48DD-F8AD-4F9C-8E6B-9E4D92DDB8F9}"); - $deviceID = $this->ReadPropertyString("DeviceID"); - if ($deviceID === "") { - $this->SetStatus(104); + // MQTT Server als Parent verbinden + $this->ConnectParent("{7F8A48DD-F8AD-4F9C-8E6B-9E4D92DDB8F9}"); + + if ($this->ReadPropertyString("DeviceID") == "") { + $this->SetStatus(104); // config error } else { - $this->SetStatus(102); + $this->SetStatus(102); // OK } } + /** + * Required when using RequestAction + */ + public function RequestAction($Ident, $Value) + { + // Im Moment haben wir keine Action-Variablen + // Wird aber von Symcon benötigt → also leer implementiert + return; + } + + /** + * Wird vom MQTT Server aufgerufen wenn Daten ankommen + */ public function ReceiveData(string $JSONString) { - $data = json_decode($JSONString, true); - if ($data === null) { - return; - } - if (!isset($data["Topic"]) || !isset($data["Payload"])) { + $buffer = json_decode($JSONString, true); + if ($buffer === null) { + IPS_LogMessage("Int_VGT", "Invalid JSON received."); return; } - $topic = $data["Topic"]; - $payload = $data["Payload"]; + if (!isset($buffer['Topic']) || !isset($buffer['Payload'])) { + IPS_LogMessage("Int_VGT", "Missing keys in buffer."); + return; + } + + $topic = $buffer['Topic']; + $payload = $buffer['Payload']; + + IPS_LogMessage("Int_VGT", "MQTT RX: {$topic} → {$payload}"); - IPS_LogMessage("Int_VGT", "Received topic: {$topic}, payload: {$payload}"); $this->HandleIncoming($topic, $payload); } + /** + * Verarbeitet eingehende MQTT-Nachrichten + */ private function HandleIncoming(string $topic, string $payload) { $deviceID = $this->ReadPropertyString("DeviceID"); + if ($deviceID == "") { + return; // no config + } + + // 1) Feedback Request if ($topic === "feedback-request/{$deviceID}") { + $response = json_encode([ "status" => "ok", "timestamp" => time() ]); + $this->Publish("feedback-response/{$deviceID}", $response); return; } + // 2) Remote Control Echo if ($topic === "remote-control-response/{$deviceID}") { - // Echo same payload + $this->Publish("remote-control-feedback/{$deviceID}", $payload); return; } } + /** + * Publisht MQTT-Daten über das Gateway + */ private function Publish(string $topic, string $payload) { - $message = [ - "Topic" => $topic, - "Payload" => $payload, - "Retain" => false, - "QoS" => 0 - ]; $data = [ "DataID" => "{7F8A48DD-F8AD-4F9C-8E6B-9E4D92DDB8F9}", - "Packet" => $message + "Packet" => [ + "Topic" => $topic, + "Payload" => $payload, + "QoS" => 0, + "Retain" => false + ] ]; + + IPS_LogMessage("Int_VGT", "MQTT TX: $topic → $payload"); + $this->SendDataToParent(json_encode($data)); } } + ?>