Tecson Tank-Spion Quadro LX-Q

Hallo zusammen,

möchte mich kurz vorstellen, bin der Jogel und komme jetzt öfters.
Seit neustem Homematic und IPS User.
Nachdem ich die vielen schönen Webfronts und Dashboards hier gesehen hatte, kam das große „auch haben wollen“. Und als alles da war kam die große Ernüchterung. Ohne PHP-Kenntnisse geht nicht viel.
Also jede freie Minute hier im Forum gestöbert und fleissig Skripts kopiert und ausprobiert und damit versucht ein bischen zu lernen und zu verstehen. Vielen dank dafür an alle.
Nun wollte ich mal meinen eigenen Wunsch umsetzen und komme nicht weiter.
Ich möchte meinen Tecson Tankanzeiger auslesen und anhand des Pegelstandes Pumpen schalten und später das ganze auch schön visualisieren. Eigentlich IPS-Kernkompetenz, denke ich mal.
Da viele Wege nach Rom führen und ich mit dem Auslesen der XML-Daten nicht weitergekommen bin, habe ich erstmal per WWW-Reader die WEB-Seite ausgelesen und in die einzelnen Werte mit je einem Parser als String gelesen und dann per Skript in Float oder Int geändert.
Soweit so gut, nur für ein paar Variablen schon viele Scripte und Parser.
Das muß intelligenter gehen, hab ich mir gedacht.
Wenn ich mit dem WWW-Reader die XML-Seite lesen möchte gibt die Konsole eine Fehlermeldung. siehe Bild.
Also viel in den PHP- und simplexml-Tutorials gesucht, aber irgendwie bekomme ich da nicht weiter,
mit dem Browser bekomme ich die xml Daten (siehe auch xml-Datei)
Irgendwie fehlt mir der entscheidene Anfang. Vielleicht hat jemand einen guten Tip für einen Newbie.
Danke schon mal
Gruß Jogel

Konsolenfehler.png

tecson.xml (1.36 KB)

Hallo zusammen,

ich habe eine Frage an die Script-Profis hier.
Mein Script funktioniert mit einer testweise lokal abgespeicherten XML-Datei.
Irgendwie komme ich aber nicht weiter. Ziel soll es sein, direkt die gleichen XML-Daten vom Server (HTTP-Aufruf) zu verarbeiten. Wenn ich Zeile 6 mit Zeile 5 austausche, wird die $xml-Variable nicht gefüllt.
Wäre schön wenn jemand einen Tip dazu für mich hat.
Bin auch dankbar für sonstige Hinweise, da das mein erster eigener Scriptversuch ist.

Jogel


// Abruf der XML-Seite vom Tecson-Füllstandsanzeiger

$xml = simplexml_load_string(utf8_encode(@Sys_GetURLContent("http://192.168.27.2/xml"))); //Aufruf der XML-Seite des Tecson
//$xml = simplexml_load_file(utf8_encode('C:	mp	ecson.xml')); // Test mit XML-File

print_r($xml); // Testausgabe ob Variable gefüllt wird

$tecson = array();

$i = 1; // Schleife für Array-Befüllung
foreach($xml->seqData->seqTanks as $tanks)
{
		$tecson[$i]['TankLevel'] = $tanks->seqTankLevel->tankLevel;
      $tecson[$i]['TankPercent'] = $tanks->tankPercent;
      $tecson[$i]['TankSize'] = $tanks->seqTankSize->tankSize;
      $tecson[$i]['TankClearance'] = $tanks->seqTankClear->tankClearance;

$i++;
   }
// Füllen der Variablen mit Formatwandlung String -> Integer
SetValueInteger(55693 /*[Tecson	ank1\TankClearance]*/ , (integer)$tecson[1]['TankClearance']);
SetValueInteger(14193 /*[Tecson	ank2\TankClearance]*/ , (integer)$tecson[2]['TankClearance']);
SetValueInteger(30205  /*[Tecson	ank1\TankLevel]*/ , (integer)$tecson[1]['TankLevel']);
SetValueInteger(27915  /*[Tecson	ank2\TankLevel]*/ , (integer)$tecson[2]['TankLevel']);
SetValueInteger(15898  /*[Tecson	ank1\TankPercent]*/ , (integer)$tecson[1]['TankPercent']);
SetValueInteger(55219  /*[Tecson	ank2\TankPercent]*/, (integer)$tecson[2]['TankPercent']);
SetValueInteger(50818  /*[Tecson	ank1\TankSize]*/ , (integer)$tecson[1]['TankSize']);
SetValueInteger(44654  /*[Tecson	ank2\TankSize]*/ , (integer)$tecson[2]['TankSize']);


Hallo Jogel,

mach mal das @ vor Sys_GetURLContent weg.

$xml = simplexml_load_string(utf8_encode(Sys_GetURLContent("http://192.168.27.2/xml"))); 

jetzt solltest Du eine Fehlermeldung erhalten. Mit @ wird diese unterdrückt.

Ob die Pfadangaben usw stimmen sollte jetzt ersichtlich sein.

Hallo Rainer,

jetzt wird eine Fehlermeldung mehr angezeigt.

Warning: in D:\IP-Symcon\scripts\12521.ips.php on line 5

Notice: Trying to get property of non-object in D:\IP-Symcon\scripts\12521.ips.php on line 13

Notice: Trying to get property of non-object in D:\IP-Symcon\scripts\12521.ips.php on line 13

Warning: Invalid argument supplied for foreach() in D:\IP-Symcon\scripts\12521.ips.php on line 13

Wobei mir die erste Warnung nichts sagt (die ist dazugekommen), ausser das ich einen Fehler im Script habe. Die anderen sind meiner Meinung nach Folgefehler, da die Variable $XML nicht gefüllt wird.

Gruß Jogel

Hallo Jogel,

ich würde jetzt mal behaupten das irgendwas mit Pfadangaben, Zugriffsrechten auf den entfernten Rechner nicht stimmt.

Ist denn die XML-Datei nicht noch in einem Unterordner?

Hallo Rainer,

Pfad und Berechtigungen sollten stimmen, da ich mit dem IE mit der Adresse http://192.168.27.2/xml
genau die XML-Daten angezeigt bekomme. Die hatte ich dann testweise als Datei lokal gespeichert.
http://192.168.27.2 zeigt eine „echte“ aufbereitete WEB-Seite.
Ist in meinem Fall überhaupt Sys_GetURLContent dann richtig?
Es gibt eine Demo-Seite im Netz http://217.91.134.36/xml, genauso bekomme ich meine Daten

Gruß Jogel

Hallo Jogel,

du kannst es ja mal mit

file_get_contents

probieren.

Hallo Rainer
so?

$xml = simplexml_load_string(utf8_encode(file_get_contents("http://192.168.27.2/xml")));

das bringt das:

Warning: file_get_contents(http://192.168.27.2/xml) [function.file-get-contents]: failed to open stream: HTTP request failed! <?xml version=„1.0“ encoding=„UTF-8“?>
in D:\IP-Symcon\scripts\12521.ips.php on line 5

Ich glaube mir fehlt noch sehr sehr viel, danke für die Geduld

Gruß Jogel

failed to open stream:

Kein Zugriff. Firewall?

Ist der Browser wo es geht auf dem selben Rechner wie IPS.

Hallo Rainer,

ja der gleiche Rechner
mir dem WWW-Reader auf die WEB-Seite geht auch

Gruß Jogel

was bringt er hier denn für eine Meldung.

$xml = simplexml_load_string(file_get_contents("http://192.168.27.2/xml"));  

ansonsten noch mal hiermit probieren.

simplexml_load_file

Hallo Rainer,

$xml = simplexml_load_string(file_get_contents("http://192.168.27.2/xml"));  

bringt

Warning: file_get_contents(http://192.168.27.2/xml) [function.file-get-contents]: failed to open stream: HTTP request failed! <?xml version="1.0" encoding="UTF-8"?>
in D:\IP-Symcon\scripts\12521.ips.php on line 5

Notice: Trying to get property of non-object in D:\IP-Symcon\scripts\12521.ips.php on line 13

$xml = simplexml_load_file(file_get_contents("http://192.168.27.2/xml"));

bringt:

Warning: file_get_contents(http://192.168.27.2/xml) [function.file-get-contents]: failed to open stream: HTTP request failed! <?xml version=„1.0“ encoding=„UTF-8“?>
in D:\IP-Symcon\scripts\12521.ips.php on line 5

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity „“ in D:\IP-Symcon\scripts\12521.ips.php on line 5

und nun?

ich glaube wir sollten erstmal das gute Wetter draußen nutzen und später weitermachen. Schließlich soll IPS ja nicht nur schönes Wetter melden, man sollte diese Information auch nutzen :slight_smile:

Jogel

PS: Vielen Dank auch für deine Wetterseite, hat mir sehr geholfen IPS ein bischen besser zu verstehen und gut siehts auch aus.

$file = file_get_contents("http://192.168.27.2");
echo $file;

die Seite ist keine .xml Datei.

in der Scriptausgabe html hast Du jetzt die Seite drinnen.

Die Daten kann man auch so in Variablen schreiben.

Hiermit hast Du das ganze als array, womit Du direkt auf die Daten zugreifen kannst.
als Beispiel:

$file = file("http://217.91.134.36");
print_r($file);
echo strip_tags($file[74]);

Hallo Rainer,

danke für deine Hilfe, ich war wohl auf dem Holzweg mit den XML-Daten. War der Meinung wenn ich die Daten im IE sehe, kann ich die auch irgendwie mit IPS abrufen.
Aber Dank deinen Tipps gehts auch über die WEB-Seite.
hier nun mein Skript:

<?
$file = file("http://192.168.27.2/"); //WEB-Seite laden
//print_r($file); //Testanzeige um Array-Zeilen zu identifizieren

// Array's um String in Interger zu Wandeln
$array_1 = array ( ' L', ' %', '.' );
$array_2 = array ( '', '', '' );

//Tank1 Variablen füllen
SetValueInteger(30205 /*[Tecson	ank1\TankLevel]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[71])))));
SetValueInteger(15898 /*[Tecson	ank1\TankPercent]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[72])))));
SetValueInteger(50818 /*[Tecson	ank1\TankSize]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[73])))));
SetValueInteger(55693 /*[Tecson	ank1\TankClearance]*/ , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[74])))));
//Tank2 Variablen füllen
SetValueInteger(27915 /*[Tecson	ank2\TankLevel]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[81])))));
SetValueInteger(55219 /*[Tecson	ank2\TankPercent]*/ , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[82])))));
SetValueInteger(44654 /*[Tecson	ank2\TankSize]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[83])))));
SetValueInteger(14193 /*[Tecson	ank2\TankClearance]*/ , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[84])))));
//Tank3 Variablen füllen
SetValueInteger(11566 /*[Tecson	ank3\TankLevel]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[91])))));
SetValueInteger(26056 /*[Tecson	ank3\TankPercent]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[92])))));
SetValueInteger(18776 /*[Tecson	ank3\TankSize]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[93])))));
SetValueInteger(49952 /*[Tecson	ank3\TankClearance]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[94])))));
//Tank4 Variablen füllen
SetValueInteger(27896 /*[Tecson	ank4\TankLevel]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[101])))));
SetValueInteger(36534 /*[Tecson	ank4\TankPercent]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[102])))));
SetValueInteger(59168 /*[Tecson	ank4\TankSize]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[103])))));
SetValueInteger(16171 /*[Tecson	ank4\TankClearance]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[104])))));
?>

mal schauen was sich so als nächste Herausforderung auftut.

Gruß Jogel

Hallo Jogel,
ich habe seit gut einem halben Jahr auch den Tecson Tankspion und seit längerem am Suchen nach einer sauberen Lösung.

Ich bekomme wenn ich mein Pfad angebe immer die Fehlermeldung

Code:

Warning: file() [function.file]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /users/matze-pe/www/tescon.php on line 2

Warning: file(http://192.168.1.7/) [function.file]: failed to open stream: no suitable wrapper could be found in /users/matze-pe/www/tescon.php on line 2

Ich habe dein Quelltext übernommen:

PHP-Code:

<?
$file = file("http://192.168.1.7/"); //WEB-Seite laden
//print_r($file); //Testanzeige um Array-Zeilen zu identifizieren

// Array's um String in Interger zu Wandeln
$array_1 = array ( ' L', ' %', '.' );
$array_2 = array ( '', '', '' );

//Tank1 Variablen füllen
SetValueInteger(30205 /*[Tecson	ank1\TankLevel]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[71])))));
SetValueInteger(15898 /*[Tecson	ank1\TankPercent]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[72])))));
SetValueInteger(50818 /*[Tecson	ank1\TankSize]*/  , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[73])))));
SetValueInteger(55693 /*[Tecson	ank1\TankClearance]*/ , (integer) strip_tags(trim(str_replace($array_1,$array_2,($file[74])))));

Hast du eine Idee was ich falsch mache?

mfg

hi,

mir ist auch noch aufgefallen, das du meine Variablen benutzt, du musst dir eigene Variablen anlegen und diese im Script ersetzen

Gruß Jogel

Danke, hab ich es jetzt hinbekommen :slight_smile:

Hallo Zusammen,

hab das hier aufmerksam gelesen und muss feststellen ich verstehen nichts!

Ich hab es mal probioert und einen www-reader angelegt und den Script eingespielt.
Natürlich mit Fehlermeldungen.

Aber jetzt muss ich doch mal Fragen, wieso nimmt man nicht die XML die da erzeugt wird und liest diese aus?

Ich geb zu ich hab von PHP null Ahnung.

Aber in dieser XML steht doch alles wichtige drin.

Wie gesagt mich würde es echt interessieren wie ich die Tankanzeige ins IP-Symcon bekomme.

Gruss
MIchael

Hallo,

war im Urlaub, deswegen erst jetzt die Antwort.

Das war mein erstes PHP-Script und ist ein sehr einfaches Ausleseskript. Du brauchst dafür kein WEB-
Reader anzulegen. du musst nur die Adresse deines Tecson angeben und alle Variablen von Hand anlegen und im Skript meine Ersetzen, dann sollte es funktionieren.

Wenn du den Thread verfolgt hast, dann siehst du, das ich seinerzeit auch auf dem XML-Trip war, habe aber es trotz guter Hilfe nicht hinbekommen XML auszulesen.
Da die Seite statisch ist und sich nie im Aufbau ändert war es mir letztlich dann egal ob ich XML oder sie Seite auslese.
und das Skript funktioniert noch heute :slight_smile:
Wenn du es mit XML hinbekommst lass es mich wissen, ich lerne auch gerne dazu :slight_smile:

Gruß jogel

Hallo Jogel,

danke für deine Antwort, aber ich hab es dann wie du gemacht und die Webseite genommen und lese diese nun alle 30 sek. neu aus. Funktioniert tadellos.

Danke, aber für die Vorarbeit.

Michael