Refactor MQTT publishing logic to handle linked variables and improve code clarity

This commit is contained in:
jhartworks
2026-03-04 09:38:04 +01:00
parent e85045d9b9
commit a934dea179
+38 -16
View File
@@ -153,11 +153,13 @@ class MonitoringClient extends IPSModule {
foreach ($childids as $childid){ foreach ($childids as $childid){
if (IPS_VariableExists($childid) != 1){ if (IPS_VariableExists($childid) != 1){
if(IPS_LinkExists($childid) == 1){ if(IPS_LinkExists($childid) == 1){
$linkInfo = IPS_GetLink($childid); $linkInfo = IPS_GetLink($childid);
$linkTarget = $linkInfo["TargetID"]; $linkTarget = $linkInfo["TargetID"];
$childid = $linkTarget; $childid = $linkTarget;
} }
} }
$varInfo = IPS_GetVariable($childid); $varInfo = IPS_GetVariable($childid);
@@ -173,6 +175,7 @@ class MonitoringClient extends IPSModule {
$topic = $catId["top"]. $parname."_".$varname; $topic = $catId["top"]. $parname."_".$varname;
$time = time(); $time = time();
$payload = round(getvalue($childid), 2); $payload = round(getvalue($childid), 2);
if($changedtime > $time - $updatetime){ if($changedtime > $time - $updatetime){
SEMC_MqttPublish($this->InstanceID,$mqttId, $topic, $payload, false); SEMC_MqttPublish($this->InstanceID,$mqttId, $topic, $payload, false);
} }
@@ -215,33 +218,52 @@ class MonitoringClient extends IPSModule {
foreach ($childids as $childid){ foreach ($childids as $childid){
foreach ($childids as $childid){ if (IPS_VariableExists($childid) != 1 && IPS_LinkExists($childid) != 1){
if (IPS_VariableExists($childid) != 1){
if(IPS_LinkExists($childid) == 1){ foreach ($childids as $childid){
$linkInfo = IPS_GetLink($childid); if (IPS_VariableExists($childid) != 1){
$linkTarget = $linkInfo["TargetID"];
$childid = $linkTarget; if(IPS_LinkExists($childid) == 1){
$varInfo = IPS_GetVariable($childid); $linkInfo = IPS_GetLink($childid);
$linkTarget = $linkInfo["TargetID"];
$childid = $linkTarget;
$varInfo = IPS_GetVariable($childid);
}
} }
$varInfo = IPS_GetVariable($childid);
$varname = IPS_GetName($childid);
$topic = $catId["top"]. $parname."_".$varname;
$payload = round(getvalue($childid), 2);
$this->MqttPublish($this->InstanceID,$mqttId, $topic, $payload, false);
} }
}else{
$varInfo = IPS_GetVariable($childid); if (IPS_VariableExists($childid) != 1){
$varname = IPS_GetName($childid);
$topic = $catId["top"]. $parname."_".$varname;
$payload = round(getvalue($childid), 2);
SEMC_MqttPublish($this->InstanceID,$mqttId, $topic, $payload, false); if(IPS_LinkExists($childid) == 1){
$linkInfo = IPS_GetLink($childid);
$linkTarget = $linkInfo["TargetID"];
$childid = $linkTarget;
$varInfo = IPS_GetVariable($childid);
}
}
$varInfo = IPS_GetVariable($childid);
$varname = IPS_GetName($childid);
$topic = $catId["top"]. $parname."_".$varname;
$payload = round(getvalue($childid), 2);
$this->MqttPublish($this->InstanceID,$mqttId, $topic, $payload, false);
} }
} }
} }
} }
$topic = "Projekte". $projectyear."/".$projectnumber. "/ISP" .$ispnumber. "/Name"; $topic = "Projekte". $projectyear."/".$projectnumber. "/ISP" .$ispnumber. "/Name";
SEMC_MqttPublish($this->InstanceID,$mqttId, $topic, $projectname, false); $this->MqttPublish($this->InstanceID,$mqttId, $topic, $projectname, false);
} }