html-Ergebnis weiterverarbeiten?

Hallo,

mit der EIngabe der URL http://192.168…/control?callback=cname&cmd=get_state_sensor&number=2 erhalte ich als browserausgabe meiner XS1 unten abgebildeten Text. Den Wert von „name“ und „value“ möchte ich gern auslesen und zwar so, dass er mir das Ergebnis als Variable in mein IPS schreibt. Könnt ihr mir weiterhelfen?

Danke
Marc

Hole mir mit folgender Funktion Datum der letzten Änderung und den Variablenwert als Array von der XS1:

Brauchst allederings Curl als PHP-Erweiterung
Der Name steckt auch irgendwo in $data, kann aber aus dem Kopf gerade nicht sagen wo.

Gruß Rolf



function xs1($sens) {
  // $sens ist integerwert mt der nummer des Sensors 1,2,3...etc.
  $ch = curl_init();
  $seite='http://192.168.1.242/control?callback=cname&cmd=get_state_sensor&number='.strval($sens);
  curl_setopt($ch, CURLOPT_URL,$seite);
  curl_setopt ($ch, CURLOPT_FRESH_CONNECT, 1);  // 
  curl_setopt ($ch, CURLOPT_HEADER, 0); // 1 mit header
  curl_setopt ($ch, CURLOPT_NOBODY, 0); // 1 OHNE Body
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Ausgabe in String



  $data = curl_exec ($ch);


  curl_close ($ch);



  $jx = explode(",", $data);

  $fertig=explode(":",$jx[8]); 
  $zwei = $fertig[1]; // Datum der letzten Änderung
  
  $fertig=explode(":",$jx[5]); 
  $eins = $fertig[1]; // Wert 


  return array($eins,$zwei);
}



und wie bekomme ich diese curl-Erweiterung ins IPS?
Sorry, im Moment bin ich mit PHP und dem Rest rundherum noch etwas überfordert…:confused:

IPS Dienst beenden, curl dll nach ext kopieren und Dienst wieder starten.

php_curl.rar (126 KB)

danke für eure schnelle & freundliche Hilfe!
Werde mich heute Abend mal dran versuchen.

mfG
Marc

Ich habe mal ein Scipt reingestellt, wie ich meine XS1 auslese.
Als erstes prüfe ich ab, ob XS1 online ist.
Anschließend wird die XML-Datei ausgelesen und die erhaltenen Werte den Variablen zugeordnet.


<?
$online=GetValueBoolean(21235 /*[System\online_XS1]*/);
if ($online==false) return;
$xml = simplexml_load_file('http://192.168.2.51/xml');#IP von XS1
$elektroimpulse= (float)$xml->data->t0;
$aussenfeuchte= (float)$xml->data->t1;
$temp_buero=(float) $xml->data->t3;
$temp_gaestebad = (float)$xml->data->t5;
$feuchte_gaestebad =(float) $xml->data->t6;
$temp_bad = (float)$xml->data->t7;
$feuchte_bad = (float)$xml->data->t8;
$temp_schlafzimmer = (float)$xml->data->t12;
$feuchte_schlafzimmer = (float)$xml->data->t13;
$feuchte_buero = (float)$xml->data->t14;
$gaestezimmerfeuchte = (float)$xml->data->t16;
$flurfeuchte = (float)$xml->data->t17;
$kuechenfeuchte = (float)$xml->data->t18;
$wohnzimmerfeuchte = (float)$xml->data->t19;
$flurtemperatur = (float)$xml->data->t20;
$wohnzimmertemperatur = (float)$xml->data->t21;
$gaestezimmertemperatur = (float)$xml->data->t22;
$kuechentemperatur = (float)$xml->data->t23;
$aussentemperatur=(float) $xml->data->t24;
$badtemperatur= (float) $xml->data->t25;
$gaszaehler= (float) $xml->data->t28;
$kuehlschrankzaehler= (float) $xml->data->t29;

SetValueFloat(38720 /*[XS1\Elektroimpulse]*/,$elektroimpulse);
SetValueFloat(19815 /*[XS1\Gaszaehler]*/,$gaszaehler);
SetValueFloat(10098 /*[XS1\Kuehlschrank Zaehler]*/,$kuehlschrankzaehler);
SetValueFloat(34870 /*[XS1\Temperatur Wohnzimmer]*/,$wohnzimmertemperatur);
SetValueFloat(29414 /*[XS1\Feuchte Wohnzimmer]*/,$wohnzimmerfeuchte);
SetValueFloat(50067 /*[XS1\Temperatur Bad]*/,$badtemperatur);
SetValueFloat(44053 /*[XS1\Feuchte Bad]*/,$feuchte_bad);
SetValueFloat(59036 /*[XS1\Temperatur Gaestebad]*/,$temp_gaestebad);
SetValueFloat(31076 /*[XS1\Feuchte Gaestebad]*/,$feuchte_gaestebad);
SetValueFloat(29369 /*[XS1\Temperatur Schlafzimmer]*/,$temp_schlafzimmer);
SetValueFloat(50659 /*[XS1\Feuchte Schlafzimmer]*/,$feuchte_schlafzimmer);
SetValueFloat(36906 /*[XS1\Temperatur Buero]*/,$temp_buero);
SetValueFloat(23765 /*[XS1\Feuchte Buero]*/,$feuchte_buero);
SetValueFloat(48989 /*[XS1\Temperatur Gaestezimmer]*/,$gaestezimmertemperatur);
SetValueFloat(50082 /*[XS1\Feuchte Gaestezimmer]*/,$gaestezimmerfeuchte);
SetValueFloat(17219 /*[XS1\Feuchte Flur]*/,$flurfeuchte);
SetValueFloat(59233 /*[XS1\Temperatur Flur]*/,$flurtemperatur);
SetValueFloat(26929 /*[XS1\Aussentemperatur]*/,$aussentemperatur);
SetValueFloat(43029 /*[XS1\Aussenfeuchte]*/,$aussenfeuchte);
SetValueFloat(55307 /*[XS1\Temperatur Kueche]*/,$kuechentemperatur);
SetValueFloat(23061 /*[XS1\Feuchte Kueche]*/,$kuechenfeuchte);
?>

Hallo,

ich muss mich hier auch mal einklinken. Ich bin absoluter Neuling und versuche gerade verkrampft IPS mit meiner XS1 zum laufen zu bringen. Ich hab den obigen Script mit der curl.dll gewählt. Reinkopiert und ausgeführt. Soweit so gut aber wie kann ich mir damit Werte in IPS anzeigen lassen? Was muss ich noch tun?

Es tut mir leid wenn ich so inkompetente Fragen stellen muss.

Vielen dank schon mal.

Ach ja, das gleiche gilt auch für Schalter. :rolleyes:

Hi redbandito,

benutz besser das script von streuber.
Ist eigentlich damit relativ einfach zu händeln…da brauchst du auch die curl.dll nicht.
Grundvoraussetzung ist, dass du deine XS1 über den Browser gemäß URL wie in Zeile 3 im Script natürlich erst mal erreichst…(IP müsstest Du natürlich anpassen ;))
nach Aufruf dieser URL im Browser brauchst Du einfach nur die Zeile in der Anzeige des Browsers auszählen, deren Wert dich interessiert. Diesen Wert kannst du dann als Variable ins IPS übernehmen (Siehe Script ab Zeile 4).
Die Zeilen 1 und 2 prüfen eigentlich nur ab, ob Deine XS1 online ist. Du solltest Sie aber zunächst mit „//“ ausklammern.

Gruß
Marc

Ok, T1 ist dann beispielsweise die Zeile im Browser? Soweit verstanden aber wozu sind die 5-stelligen Zahlenwerte? Wo trage ich das dann ins Ips? Ein paar Screenshots wären Klasse. Ich muss leider so penetrant Nachfragen, da das leider komplettes Neuland für mich ist. Ich danke ganz herzlich.

[QUOTESoweit verstanden aber wozu sind die 5-stelligen Zahlenwerte][/QUOTE]

Das sind die ID deiner Variablen.

Hier ein bischen Lektüre.

Einführung: IP-Symcon :: Automatisierungssoftware

In Ergänzung zu Rainers Antwort ein Link zur Erläuterung von Variablen und deren Einrichtung: Variablen: IP-Symcon :: Automatisierungssoftware

Gruß Marc

Ja wie geil, super es klappt. So jetzt noch die Frage der Fragen. Wie binde ich die Aktoren der xs1 ein?

Ihr seid echt super!

Sag erst mal, was klappt :slight_smile:
Hast du übern Browser die xs schon anfunken können, das wäre erst mal Grundvoraussetzung für das weitere Vorgehen…

Ich kann die Sensoren problemlos auslesen und im IPS darstellen. Die XS1 liefert die Daten ja immer sauber. Ich musste nur noch den Script mit einem 5minütigen Refresh belegen, da die Sensorwerte von IPS nicht aktualisiert wurden.

Wie gesagt, die Sensorgeschichte funktioniert perfekt. Jetzt muss ich nur noch die Aktoren einbinden und da benötige ich mal wieder eure Hilfe.

Gruß

Felix

Im Browser kannst du die angeschlossenen aktoren on/off schalten. Klick dort mal auf so nen Schaltbutton und notier/Kopier dir die URL. Diese kannst du in nem Script meines Wissens mit Fopen($URL) weiterverarbeiten.

Gruß Marc

Das habe ich schon probiert, leider zeigt er mir nicht den aktuellen Zustand der Aktoren an. Außerdem habe ich dann für jeden Aktorzustand eine Zeile. Ich hätte aber einfach nur ein Button der entweder auf an oder aus steht.

Viele Grüße

Felix

Ich benutze bei mir nur eine Handvoll FS20 Aktoren für untergeordnete Schaltaufgaben, ansonsten noch ein paar Temperatursensoren, Rest über Knx-Bus. Und die FS20 Teile sind ohnehin nicht bidirektional. Deshalb kann, zumindest in meiner Konstellation, der tatsächliche Schaltzustand ohnehin nicht abgefragt werden, so dass ich mich hiermit auch nicht weiter beschäftigt habe.

Gruß
Marc