http request / Ajax Auslesung Werte der statelist.cgi (xmlapi)

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
jayjo
Beiträge: 25
Registriert: 15.03.2017, 17:05
Hat sich bedankt: 1 Mal

http request / Ajax Auslesung Werte der statelist.cgi (xmlapi)

Beitrag von jayjo » 22.03.2020, 12:20

Hallo,

ich habe am Wochenende schon gesucht, bin aber nicht wirklich fündig bzw. schlauer geworden. Mein Ziel ist es aus der statelist.cgi Werte auszulesen und diese auf meiner lokalen Website darzustellen. Das setzen von Werten und Starten von Programmen klappt über die xmlapi einwandfrei. Wichtig wäre mir allerdings auch die Auswertung. Daher habe ich versucht mit einem http request die statelist.cgi auszulesen, klappt aber leider nicht. Also wieder gesucht und das hier (XML-API cgi eine XML datei erzeugen lassen) im Forum gefunden: viewtopic.php?t=26061.

Wenn ich jetzt auf der CCU2 ein Script anlege und die erstellte XML im tmp Ordner ablegen lasse, kann ich dann mit httpRequest die gewünschten Werte über javascript auslesen oder sind weitere Schritte notwendig?

Hier mein Ansatz:

Code: Alles auswählen

function teste()
		{
		var xmlHttp = new XMLHttpRequest();
		var url='http://192.1.X.X/config/xmlapi/statelist.cgi';
		xmlHttp.onreadystatechange = function() { 
			if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
			    document.getElementById("output").innerHTML = xmlHttp.responseText;
		}
		xmlHttp.open("GET", url, true); 
		xmlHttp.send(null);			
		}
Der Output soll dann hiermit erreicht werden:

Code: Alles auswählen

<div class="container1" onload="teste()">
  <span id="output"></span>  
</div>
Ich bekomme beim untersuchen in Chrome auch keine Fehler ausgeworfen, aber halt auch keine Werte angezeigt. Woran liegt es, dass der Abruf nicht funktioniert? Nur weil es eine cgi Datei, statt XML ist? Kann mir jemand mit einem Beispiel für den Abruf aus der statelist.cgi weiterhelfen? Bin über jede Hilfe dankbar. In Sachen Javascript bin auch erst am Beginn und daher noch Anfänger.

Besten Dank und bleibt gesund!
Grüße Jay
Zuletzt geändert von jayjo am 29.03.2020, 15:19, insgesamt 1-mal geändert.

jayjo
Beiträge: 25
Registriert: 15.03.2017, 17:05
Hat sich bedankt: 1 Mal

Re: http request mit xmlapi von statelist.cgi

Beitrag von jayjo » 24.03.2020, 09:37

Hat wirklich keiner eine Idee, oder geht das einfach nicht wie ich es mir vorstelle?
Wie lest ihr denn Daten aus der statelist.cgi aus? Oder gibt es noch einen anderen Weg an die Daten zu kommen?

Grüße
Jay

Bratmaxe
Beiträge: 1573
Registriert: 28.05.2015, 12:48
Wohnort: Willich
Hat sich bedankt: 4 Mal
Danksagung erhalten: 10 Mal

Re: http request mit xmlapi von statelist.cgi

Beitrag von Bratmaxe » 24.03.2020, 12:33

Wenn ich das Skript http://192.168.178.203/config/xmlapi/statelist.cgi aufrufe, dann erhalte ich als Rückmeldung eine XML-Datei.
Von daher sollte das klappen.

Vielleicht musst du z.B. "wget" oder "http get" verwenden, sonst habe ich keine Idee, denn es kommt ja eine Rückmeldung.
Gruß Carsten

jayjo
Beiträge: 25
Registriert: 15.03.2017, 17:05
Hat sich bedankt: 1 Mal

Re: http request mit xmlapi von statelist.cgi

Beitrag von jayjo » 24.03.2020, 17:19

Danke Carten für den input. Werde heute Abend mal noch ein wenig forschen. Man sieht im Netz immer wieder Beispiele, wie oben von mir gepostet, aber ich bekomme einfach keine Daten ausgeliefert. Habe es heute nochmal mit einer anderen Datei vom Wetterdienst versucht. Hier werden die aktuellen Warnungen in einer HTML Datei ausgegeben. Habe dann wieder versucht, wie oben die Daten mit dem Befehl zu erhalten, klappte aber leider auch nicht. Irgendwas muss ich da noch falsch machen, komme aber einfach nicht darauf.
https://www.dwd.de/DWD/warnungen/warnap ... e_bbb.html
Die HTML ist frei zugänglich und kann für alle Bundesländer entsprechend abgerufen werden.

Code: Alles auswählen

function teste()
		{
		var xmlHttp = new XMLHttpRequest();
		var url='https://www.dwd.de/DWD/warnungen/warnapp_gemeinden/json/warnings_gemeinde_bbb.html';
		xmlHttp.onreadystatechange = function() { 
			if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
			    document.getElementById("output").innerHTML = xmlHttp.responseText;
		}
		xmlHttp.open("GET", url, true); 
		xmlHttp.send(null);			
		}
Ziel ist meinen Tempsensor und die Heizungssensoren für Temperatur auf meiner statischen Seite anzeigen zu lassen.
Wie gesagt, Werte setzten, Heizung steuern, Licht schalten usw. klappt einwandfrei, aber halt nicht das Auslesen der Daten.

Grüße

jayjo
Beiträge: 25
Registriert: 15.03.2017, 17:05
Hat sich bedankt: 1 Mal

Re: http request mit xmlapi von statelist.cgi

Beitrag von jayjo » 29.03.2020, 15:15

Ich bin einen Schritt weiter gekommen. Nur mit Javascript kann man die statelist.cgi nicht auslesen, weil das auslesen externer Seiten mit javascript auf Grund der police generell nicht erlaubt ist. Man muss also mit Ajax oder mit Ajax und PHP arbeiten, so wie ich das jetzt gelesen und verstanden habe. Mit dem nachfolgenden Code kann ich die statelist.cgi auslesen und bekommt alle Werte als Document in der Console Chrome(F12) angezeigt. Als Ausgabe auf meiner HTML Seite erhalte ich allerdings nur [object XMLDocument] ohne irgendwelche Werte.

Mit diesem Code wird die statelist.cgi ausgelesen und in der Console angezeigt.

Code: Alles auswählen

$.ajax({
  url: 'http://eureIP-Adresse/config/xmlapi/statelist.cgi',
  success: function(response){ 
	console.log(response);
  },
  error: function(response){
    console.log('server error');
  }
})
HTML Code

Code: Alles auswählen

<html>
<head><script src="https://code.jquery.com/jquery-latest.js"></script></head>
<body>
<div id="myDiv"></div>
<div id="myDiv2"></div>
</body>
</html>
Hier nun mein Versuch den Temperaturwert über ElementsByName auszulesen. Leider klappt das nicht und ich bekomme als Ausgabe nur diese Anzeige [object NodeList]. Es wird eine NodeList erstellt, diese kann man in der Console auch sehen, aber es sind keine Werte enthalten.

Code: Alles auswählen

$.ajax({
  url: 'http://eureIP-Adresse/config/xmlapi/statelist.cgi',
  success: function(response){    
	var temp = document.getElementsByName("BidCos-RF.LEQ106XXXX:1.TEMPERATURE");
	//var wert = 
	if(temp === temp){
	  document.getElementById("myDiv").innerHTML = temp;
	  document.getElementById("myDiv2").innerHTML = response; 	
	}
	console.log(response);
	console.log(temp);
  },
  error: function(response){
    console.log('server error');
  }
})
Kann mir hier vielleicht jemand weiterhelfen? Wie verarbeite ich jetzt die ausgelesenen Werte der statelist.cgi bzw. der folgenden NodeList. Mein Ziel ist es noch immer den Temperatursensor Außen und Innen auszulesen. Etwas Verständnis in Bezug auf Javascript habe ich schon, aber leider anscheinend nicht genug.

Grüße Jay

Antworten

Zurück zu „HomeMatic allgemein“