GHL-Aquariencomputer auslesen?

Werte Forengemeinde,
ich stelle mir schon seit längerem die Frage, wie man o.g. Gerät in IPS einbinden kann.
Grundsätzlich sehe ich dazu 2 Möglichkeiten.

  1. Es gibt ein Frontend, dass über USB/RS232 und TCP/IP über Port 10001 im lokalen Netzwerk ausgelesen werden kann. Da ich den permanenten Zugriff über TCP/IP auf Grund vorhandener Infrastruktur eingerichtet habe, würde ich diese Variante bevorzugen.
  2. Mein GHL-Teil hat einen integrierten Webserver, den ich schon eingerichtet habe.
    Hauptaugenmerk würde ich auf das Datenlogging richten, da dieses im GHL zwar vorhanden, aber nicht wirklich zweckmäßig umgesetzt wurde…

Welche Möglichkeiten zur Umsetzung des Vorhabens seht ihr?
Vielen Dank für jedwede Unterstützung, kabo63.

Hallo Kabo,

ich mache es wie folgt:

Anpassungen am Profilux:
http://forum.aquariumcomputer.com/showthread.php?2866-Auslesen-der-Messdaten-per-PHP&p=16896#post16896
In dem Thread steht auch wie s geht. Es muss die data.xml" in das Webserververzeichnis für eigene Seiten auf dem Profilux gelegt werden. Das geht mit einem SFTP Client.

data.xml:


<?xml version="1.0" encoding="utf-8" ?>
<PL3>
  $$REPS[32][0]$$
  <Device>
    <ID>SEN$$LCTR$$</ID>
    <Name>$$SENN[xx]$$</Name>
    <VALUE>$$SENV[xx]$$</VALUE>
    <Mpdate>$$DATE$$ $$TIME$$</Mpdate>
    <MpTime>$$DATE$$ $$TIME$$</MpTime>    
  </Device>
  $$REPE$$
  $$REPS[32][1]$$
  <Device>
    <ID>ILL$$LCTR$$</ID>
    <Name>$$ILLN[xx]$$</Name>
    <VALUE>$$ILLV[xx]$$</VALUE>
    <Mpdate>$$DATE$$ $$TIME$$</Mpdate>
    <MpTime>$$DATE$$ $$TIME$$</MpTime>    
  </Device>
  $$REPE$$ 
    $$REPS[32][2]$$
  <Device>
    <ID>SWI$$LCTR$$</ID>
    <Name>$$SWIN[xx]$$</Name>
    <VALUE>$$SWIS[xx]$$</VALUE>
    <Mpdate>$$DATE$$ $$TIME$$</Mpdate>
    <MpTime>$$DATE$$ $$TIME$$</MpTime>    
  </Device>
  $$REPE$$       
</PL3>

In IPS:

  • WWW Reader angelegt, mit der IP Adresse des GHL mit folgendem Link: http://ip-adresse-des-profilux/data.xml
  • TextParser mit dem WWWReader als übergeordnete Instanz.
  • 3 Variablen angelegt, String für den Input, Float für Temperatur, und Float für pH Wert
  • Im Textparser „Hole zwischen“ suche nach " / " und schreibe in die Stringvariable.
  • Script mit folgendem Inhalt angelegt:

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

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

$xml = simplexml_load_string($text);

foreach ( $xml->Device as $sensor )
{
   //echo 'ID: ' . $sensor->ID ."
";
   //echo 'Name: ' . $sensor->Name ."
";
   //echo 'Wert: ' . $sensor->VALUE ."
";
   
   if ($sensor->ID == "SEN000") {
      $ph = $sensor->VALUE;
	}
	if ($sensor->ID == "SEN001") {
	   $temperature = $sensor->VALUE;
	}
}

$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);

?>

  • Bitte im Script oben die ID der Springvariable und unten die ID´s zu den beiden Variablen eintragen.
  • Ereignis für das Script im gewünschten Zyklus anlegen.

Im Script lassen sich auch mehr Werte entnehmen, das hängt davon ab, wie viele Sensoren du angeschlossen hast. Da musst Du dann aber selbst etwas Hand anlegen, ich wollte erstmal nur Temperatur und pH Wert haben. Du kannst Dir ja die xml ansehen, da erkennt man recht schnell wie es geht.

Gruß
Christian

Hallo Christian,…huch - das ging ja fix - ich schau mir das in Ruhe mal an :slight_smile:
Ich hab diesen Thread in meiner Suche nicht aufgeführt gesehen…Dankeschön für’s Erste…
Gruß, Kay.

Hallo,

Wie „c.radi“ habe ich es damals auch gemacht, funktionierte super.

LG
Sven

Hallo,
wie es aussieht, hab ich ein Variablenproblem - komm aber nicht drauf, eventuelle auch schon zu spät für mich grad…Hat wer ne Ahnung???
Danke und Gruß, Kay.

PL3_XML.PNG

Hallo,

aus meiner Sicht läuft der WWW Reader und Textparker noch nicht. Damit findet das Script keine xml Struktur und kann die Variable „ph“ nicht erzeugen.

Geh mal in den Textparker und dort auf Debug, ob er dir Daten anzeigt. Bisher wurde die Input Variable nicht aktualisiert. Erst wenn da die Daten drin stehen kann das Script etwas verarbeiten.

Gruß
Christian

…so sieht es auch aus…was kann das Problem sein?
Gruß, Kay.

Hi,

welchen Link hast Du im WWWReader eingetragen?
Da muss der gleiche rein, wie Du die xml Datei auf dem GHL benannt hast.

also bei mir http://192.168.114.36/data.xml.

In dem Screenshot vom Textparser sieht man den Anfang des geholten Textes, und der stimmt nicht mit den Screenshot von der xml im obigen Post überein. Da wird also was anderes geholt, und darin gibt es die Tags <PL3> nicht.

Eventuell hast Du den TextParser mit dem falschen WWWReader verbunden, prüfe also mal die übergeordnete Instanz. Das sieht man auf Deinen Screenshots nicht.

Gruß
Christian

Hallo Christian,
hab jetzt alles nochmal komplett neu angelegt und im Profilux auch nur die data.xml hinterlegt - ich hatte noch eine data1.html zu Testzwecken hochgeladen.
Die gleiche Fehlermeldungen kommen zwar nach wie vor, aber in den Parser steht schon mal was drin bezüglich des ph-Wertes, dann „Failed“ auch da noch was…ach so, im WWW_Reader kommt auch nicht mehr an wie es aussieht, hab kurz einen debug gemacht…
Ich hab mal versucht, die gesamten noch nicht geposteten Screens der Konfiguration als Anhänge abzubilden.
Gruß, Kay.

Hallo Kay,

du hast einen kleinen Fehler im Textparser.

Dort muss stehen:

zwichen <PL3>

und

</PL3>

Der Schrägstrich vor dem zweiten PL3 fehlt, das ist das Ende-Tag des XML. Dann sollte es gehen.

Gruß
Christian

Hallo Christian,
genauso war es - jetzt funkt es wie es soll…öhm, gibt es auch die Möglichkeit zusätzliche Informationen wie Betriebsstunden oder den aktuellen Strom von den betreffenden Steckdosenleisten auszulesen?
Ansonsten möchte ich mich ausdrücklich für Deine schnelle und kompetente Unterstützung bedanken.
VG, Kay.

Hallo Kay,

ja da geht sicher noch einiges mehr.
Hier ist der Link zu einer Beschreibung von GHL zur Struktur der Daten, die man auslesen kann.

http://downloads.aquariumcomputer.com/DownloadFile.php?fileID=154

Da sind die Einträge in der data.xml beschrieben. Ich habe mich damit nicht weiter beschäftigt, kann also ab jetzt auch nicht mehr helfen. Ich wünsche aber viel Erfolg.
Vielleicht magst Du ja Deine Erkenntnisse hier im Thread für die Nachwelt dokumentieren.

Gruß
Christian

PS: Hatte ich schon erwähnt, das ich gar kein Aquarium mehr habe :slight_smile:

…mach ich gerne :slight_smile:

…hattest Du nicht…ich stand auch schon kurz davor, mit dem Ergebnis, dass meine „ehemalige Freundin“ (also jetzt Frau :wink: ) auf die Barrikaden ging…jetzt hab ich noch mal richtig „aufgerüstet“… *gg

Gruß, Kay.

Hallo Christian,
geht eigentlich die Auswertung der json-Daten des PL3-Webservers, bzw. gibt es einen Parser in IPS, oder wäre der Ansatz wenig praktikabel?
Gruß, Kay.

Hallo Kay,

Sorry, aber da kann ich leider nicht helfen. Das habe ich mir nie angesehen.

Gruß
Christian

Ok, Danke Christian … Gruß, Kay.

Hallo Christian,
falls Du mitliest, ich hab versucht, die Schaltzustände auszulesen und in variable „check“ zu speichern - klappt irgendwie nicht, hab auch schon einiges versucht mit unterschiedlichen Variablentypen - ändert sich nix wirklich…wo könnte der Fehler sein?

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

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

$xml = simplexml_load_string($text);

foreach ( $xml->Device as $schalter )

{
   if ($schalter->ID == "SWI001") {
       $schalter1 = $schalter->VALUE;
    }
}

$schalter1 = ltrim($schalter1);
$schalter1 = str_replace("Status","",$schalter1);
$schalter1 = floatval($schalter1);
setValue(50271 /*[Profilux3\check]*/,$schalter1);

?>

s_status_txt.PNG

Hi,

Sitze nur am Tablet, kann also nichts probieren.
Für mich machen die drei Zeilen vor dem SetValue keinen Sinn.

In $schalter1 steht nach der if doch eine 0 oder 1. Die muss nur der Variablen zugewiesen werden.
Baue doch mal in den Code ein Echo $Schalter1 ein, dann siehst du was da drin steht.

Gruß
Christian

Hallo Christian,
wie es aussieht, werden die Werte nicht richtig/ gar nicht übergeben, evtl. schon aus der XML heraus nicht…
Gruß, Kay.

S1.PNG

Moin,

Lass mal in den Echo Zeilen die das ->Value weg.
In der Zeile über dem Echo schreibst Du den Wert in Deine Variable …1 oder …2, und deren Inhalt musst Du in der Echo Zeile ausgeben.

Sorry, ich bin wieder nur am Tablet, sonst würde ich Dir das schnell schreiben.

Gruß
Christian