Files
Symcon_Belevo_Energiemanage…/Int_VGT/module.php
2025-11-13 08:08:57 +01:00

92 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
class Int_VGT extends IPSModule
{
public function Create()
{
parent::Create();
$this->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]));
}
}
?>