GHL-Aquariencomputer auslesen?

Hallo Christian,
hab das hoffentlich so wie notwendig zum Test angepasst - es sieht so aus, dass nur ein Nullwert übergeben wird, auch wenn ich die Schaltfunktion manuell auf „1“ setze…hm.

S1.PNG

Hallo,

Ja schon, aber warum machst Du eine floatval Umwandlung es ist doch ein Boolean Wert.
Lass die beiden Zeilen mal raus.

Ansonsten muss ich meine weitere Hilfe auf morgen vertagen, da ich keinen Zugriff auf IPS habe und selbst nichts probieren kann.

Gruß
Christian

…ich hätte gerne den Einschaltzustand als Zähler geloggt und bin mir nicht sicher, ob ich das mit den Bool-Werten hinbekomme.
Ansonsten sieht es nach wie vor so aus, als ob nix ausgelesen wird bzw. ich bin einfach zu unerfahren in PHP, um es selbst rauszubekommen…Ansonsten eilt es nicht wirklich und es wäre vollkommen nett und ausreichend, wenn Du mir morgen noch Tipps geben könntest - vielen Dank bis hierhin, Gruß, Kay.

P.S. Die Werte werden ja m.E. sauber geparst(Anhang s4)…

Hallo Kay,

ich habe mir das Script und die xml noch mal angesehen und mir ist folgendes aufgefallen:

-In meiner XML steht für die Switches der Wert „Ein“ oder „Aus“

mit folgendem Code kann ich die Werte parsen und dann auch in eine Variable schreiben. Hier mal der gesamte Code:


<?php
$text = '<?xml version="1.0" encoding="utf-8" ?><PL3>';

$text .= GetValue(33857 /*[Script\Aquarium\Text]*/);
$text .= "</PL3>";

//echo $text."
";

$xml = simplexml_load_string($text);

foreach ( $xml->Device as $sensor ) {
   
   if ($sensor->ID == "SEN000") {
      $ph = $sensor->VALUE;
	}
	if ($sensor->ID == "SEN001") {
	   $temperature = $sensor->VALUE;
	}
	if ($sensor->ID == "SWI000") {
		echo $sensor->VALUE."
";
		if ($sensor->VALUE == "Ein") {
	   	$schalter1 = 1;
	   } elseif ($sensor->VALUE == "Aus") {
	      $schalter1 = 0;
		}
	}
}


echo $schalter1."
";
SetValue(43009,$schalter1);

$ph = ltrim($ph);
$ph = str_replace("pH","",$ph);
$ph = floatval($ph);
SetValue(19297 /*[Script\Aquarium\pH Wert]*/,$ph);

$temperature = ltrim($temperature);
$temperature = str_replace("C","",$temperature);
$temperature = floatval($temperature);
SetValue(47493 /*[Script\Aquarium\Temperatur]*/,$temperature);

?>

Warum hat Du zwei Variablen, in denen das Ergebnis der XML steht? Evtl. liegt der Fehler in der Eingangsvariablen, weil die XML nicht mehr umwandelbar ist.

Gruß
Christian

Hallo Christian,
vielen Dank für Deine Rückmeldung. Ich hab in meiner XML die Werteausgabe auf „0“ und „1“ gestellt, aus dem schon genannten Grund. Bezüglich der 2 Variablen, ich hoffe, Du meinst schalter1 bzw. schalter2, Hintergrund: 2 Schaltvorgänge = 2 Variablen - geht doch nicht anders, wenn ich evtl. in 1 Script beide Werte auslesen möchte? Falls Du „Text Schalterstatus“ meinst - ich hab ja eine 2. XML mit anderem Namen angelegt…
Ich hab ansonsten auch schon in meinem „alten“ Script die XML erweitert und über die Schalter „Ein“ und „Aus“ auslesen lassen und als Bool-Wert gespeichert, hat soweit funktioniert aber erst nach „ltrim“.
Gruß, Kay.

Hallo Kay,

dann bin ich mit meinem Latein auch eher am Ende.
ich hoffe Du bekommst es noch hin.

Gruß
Christian

Hallo Christian,
dank Deiner Unterstützung hat sich jetzt alles so einrichten lassen das es soweit passt - der Rest ist Feintuning an der Darstellung - ich denk noch über eine tabellarische Darstellung nach… Ich hab letztendlich die ursprüngliche XML noch etwas „aufgebohrt“ und die „0“ und „1“-Variante genutzt, noch schnell eine separate Zählervariable eingerichtet - den Rest macht: :loveips:
Nachfolgend das Script und im Anhang die „grobe“ Übersicht :wink:
Viele Grüße und herzlichen Dank für Dein Mitmachen - Kay.

<?php
$zaehlheiz =0;
$zaehlfuellstand =0;

$text = '<?xml version="1.0" encoding="utf-8" ?><PL3>';

$text .= GetValue(20596 /*[Profilux3	ext]*/);
$text .= "</PL3>";

$xml = simplexml_load_string($text);

foreach ( $xml->Device as $sensor )
{
   //echo 'ID: ' . $sensor->ID ."
";
   //echo 'Name: ' . $sensor->Name ."
";
   //echo 'Wert: ' . $sensor->VALUE1 ."
";

   if ($sensor->ID == "SEN000") {
      $ph = $sensor->VALUE;
    }
   if ($sensor->ID == "SEN001") {
       $temperature = $sensor->VALUE;
    }
   if ($sensor->ID == "SEN002") {
       $leitwert = $sensor->VALUE;
    }
   if ($sensor->ID == "SEN003") {
       $redox = $sensor->VALUE;
    }
   if ($sensor->ID == "SWI000") {
       $heizstrom = $sensor->VALUE;
       $statusheiz = $sensor->VALUE1;
    }
   if ($sensor->ID == "SWI001") {
       $status = $sensor->VALUE1;
//echo 'Wert: ' . $status ."
";
    }
}

$ph = ltrim($ph);
$ph = str_replace("pH","",$ph);
$ph = floatval($ph);
SetValue(17145 /*[Profilux3\ph]*/,$ph);

$temperature = ltrim($temperature);
$temperature = str_replace("C","",$temperature);
$temperature = floatval($temperature);
SetValue(10966 /*[Profilux3	emperature]*/,$temperature);

$leitwert = ltrim($leitwert);
$leitwert = str_replace("Rx","",$leitwert);
$leitwert = floatval($leitwert);
SetValue(33701 /*[Profilux3\Leitwert]*/,$leitwert);

$redox = ltrim($redox);
$redox = str_replace("LW","",$redox);
$redox = floatval($redox);
SetValue(15206 /*[Profilux3\Redox]*/,$redox);

$heizstrom = ltrim($heizstrom);
$heizstrom = str_replace("A","",$heizstrom);
$heizstrom = floatval($heizstrom);
SetValue(16464 /*[Profilux3\Heiz_Strom]*/,$heizstrom);

//Abfrage Status Füllstandsregelung Technikbecken und Zählervariable setzen
$status = ltrim($status);
SetValue(23217 /*[Profilux3\status_FS]*/,$status);
if ($status ==1)
	{
	   $zaehlfuellstand=$zaehlfuellstand+1;
	   SetValue(42856 /*[Profilux3\zaehler_heiz]*/,$zaehlfuellstand);
	}
else
   {
	   $zaehlfuellstand=0;
	   SetValue(30505 /*[Profilux3\zaehler_FStand]*/,$zaehlfuellstand);
	}

//Abfrage Heizstatus und Zählervariable setzen
$statusheiz = ltrim($statusheiz);
SetValue(13270 /*[Profilux3\status_heizen]*/,$statusheiz);

if ($statusheiz ==1)
	{
	   $zaehlheiz=$zaehlheiz+1;
	   SetValue(42856 /*[Profilux3\zaehler_heiz]*/,$zaehlheiz);
	}
else
   {
	   $zaehlheiz=0;
	   SetValue(42856 /*[Profilux3\zaehler_heiz]*/,$zaehlheiz);
	}

?>