weather.json auslesen und in Variable speichern.

Benutzeravatar
Vardaaran
Beiträge: 97
Registriert: So 1. Jan 2017, 11:36

Do 11. Mai 2017, 13:21

Hallo zusammen,

ich stehe gerade total auf dem Schlauch und komme trotz stundenlangem Googlen zu keinem Ergebnis.

Ich möchte die "weather.json" vom Light-Manager Air mit JS auslesen und in einer Variable speichern.
Allerdings bekomme ich keine Anfrage (über XMLHttpRequest) hin. Mein LM hat ein Passwort und Benutzername, aber diese habe ich entsprechend eingetragen:

Code: Alles auswählen

var LMWerte;
LMWerte = new XMLHttpRequest();
LMWerte.open("GET","http://192.168.0.131:31/weather.json", true, 'BENUTZER', 'PASSWORT');
LMWerte.send();
Dennoch kommt der readyState nicht über 1 hinaus...

Code: Alles auswählen

alert("ReadyState: " LMWerte.readyState);
Wo liegt mein Fehler?

Vielen Dank im Voraus!
paulinchen
Beiträge: 303
Registriert: Di 28. Feb 2017, 14:15

Fr 12. Mai 2017, 15:31

Warum übergibst Du dabei Passwort/Benutzername? Das braucht man eigentlich nicht.
Was soll die Angabe des Ports 31?

Ich nutze auf meinen Dashboard jQuery zur Abfrage der Params.json ohne all diese Angaben. Sollte ja dann für die Weather.json auch funktionieren.

Code: Alles auswählen

  //Konstanten definieren...
  CONST_IP_LIGHTMANAGER = "192.168.1.230";    //Port: 80
  CONST_IP_MILIGHTSERVER = "192.168.1.240";   //Port: 8888
  CONST_IP_ET9200 = "192.168.1.101";          //Port: 80
  CONST_IP_SKY = "192.168.1.208";             //Port: 8060


  //globale Variablen deklarieren...
  var MARKER_POWER_SAT = false;         //Marker 01
  var MARKER_POWER_TV = false;          //Marker 02
  var MARKER_POWER_AMP = false;         //Marker 03
  var MARKER_POWER_BLURAY = false;      //Marker 04
  var MARKER_POWER_SKY = false;         //Marker 05
  var MARKER_POWER_BEAMER = false;      //Marker 06
  var MARKER_TVLIFT_OBEN = false;       //Marker 10
  var MARKER_POWER_DECKE1 = false;      //Marker 11
  var MARKER_POWER_DECKE2 = false;      //Marker 12
  var MARKER_POWER_RGB1 = false;        //Marker 13
  var MARKER_POWER_RGB2 = false;        //Marker 14
  var MARKER_POWER_RGB3 = false;        //Marker 15
  var MARKER_POWER_RGB4 = false;        //Marker 16


//Funktion aktualisiert periodisch die globalen Markervariablen an Hand der Werte in der JSON-Datei "params.json"...
  function Marker_Auslesen(){
    //Datei http://lightmanger.ip/params.json auswerten...
    //"marker state":   "01000000000000000000000000000000"
    $.getJSON('http://' + CONST_IP_LIGHTMANAGER + '/params.json', function(jd) {
      //alle Parameter durchsuchen...
      $.each(jd, function (index, value) {
        if (index == 'marker state') {
          //Parameter 'marker state' gefunden...
          //alert(value);
          if (value[0] == 1) {MARKER_POWER_SAT = true} else {MARKER_POWER_SAT = false};
          if (value[1] == 1) {MARKER_POWER_TV = true} else {MARKER_POWER_TV = false};
          if (value[2] == 1) {MARKER_POWER_AMP = true} else {MARKER_POWER_AMP = false};
          if (value[3] == 1) {MARKER_POWER_BLURAY = true} else {MARKER_POWER_BLURAY = false};
          if (value[4] == 1) {MARKER_POWER_SKY = true} else {MARKER_POWER_SKY = false};
          if (value[5] == 1) {MARKER_POWER_BEAMER = true} else {MARKER_POWER_BEAMER = false};
          if (value[9] == 1) {MARKER_TVLIFT_OBEN = true} else {MARKER_TVLIFT_OBEN = false};
          if (value[10] == 1) {MARKER_POWER_DECKE1 = true} else {MARKER_POWER_DECKE1 = false};
          if (value[11] == 1) {MARKER_POWER_DECKE2 = true} else {MARKER_POWER_DECKE2 = false};
          if (value[12] == 1) {MARKER_POWER_RGB1 = true} else {MARKER_POWER_RGB1 = false};
          if (value[13] == 1) {MARKER_POWER_RGB2 = true} else {MARKER_POWER_RGB2 = false};
          if (value[14] == 1) {MARKER_POWER_RGB3 = true} else {MARKER_POWER_RGB3 = false};
          if (value[15] == 1) {MARKER_POWER_RGB4 = true} else {MARKER_POWER_RGB4 = false};
        };
      });
    });

   //Dashboard aktualisieren...
   Marker_Auswerten();
 };
Benutzeravatar
Vardaaran
Beiträge: 97
Registriert: So 1. Jan 2017, 11:36

Fr 12. Mai 2017, 21:45

Schon mal vielen Dank!

Die Abfrage über getJSON zu machen, ist natürlich eine gute Methode. Ich werde mal schauen, ob ich es so hinbekomme...

Die Angaben von Port und Benutzer/Passwort sind bei mir notwendig, weil mein LM so eingestellt ist.
Er hat also einen Passwortschutz und läuft über Port 31 (nicht 80 wie normal)...
Benutzeravatar
Vardaaran
Beiträge: 97
Registriert: So 1. Jan 2017, 11:36

Fr 12. Mai 2017, 22:58

bin bislang leider nicht sehr erfolgreich :cry: :oops:

Code: Alles auswählen

function Sensoren_Auslesen() {
  //Konstanten definieren...
	CONST_IP_LIGHTMANAGER = "http://NAME:PASSWORT@192.168.0.131:31/";    //LM
	Thermometer = new Array;
	IndexNr = 0;

	$.getJSON(CONST_IP_LIGHTMANAGER + 'weather.json', function(jd) {
		$.each(jd, function (index, value) {
			if (index == 'temperature') {
				Thermometer[IndexNr] = value;
				IndexNr++;
			}
		});
	});
	alert(Thermometer.length);
	while (IndexNr >= 0) {
		INHALT = INHALT + "Sensor " + IndexNr + ": " + Thermometer[IndexNr] +"</ br>";
		IndexNr--;
	}
	document.getElementById("testp2").innerHTML = INHALT;
};
Dos
Beiträge: 379
Registriert: Di 13. Sep 2016, 18:19

Di 16. Mai 2017, 22:46

Hi,

Ich mache es wie von sebi beschrieben...

https://www.schlaue-huette.de/lightmana ... rarbeiten/

Wenn du dazu fragen hast, kann ich ggfs helfen.
Benutzeravatar
Vardaaran
Beiträge: 97
Registriert: So 1. Jan 2017, 11:36

Mi 17. Mai 2017, 12:47

Dos hat geschrieben:
Di 16. Mai 2017, 22:46
Hi,

Ich mache es wie von sebi beschrieben...

https://www.schlaue-huette.de/lightmana ... rarbeiten/

Wenn du dazu fragen hast, kann ich ggfs helfen.
Schon mal vielen Dank! :)
Möchte bzw. müsste das Ganze aber über ein Javascript abrufen. Der PHP-Code scheint hier nicht übertragbar zu sein. :cry:
Gibt es daher auch eine Möglichkeit mit Javascript?
paulinchen
Beiträge: 303
Registriert: Di 28. Feb 2017, 14:15

Di 6. Jun 2017, 19:03

Hallo,
auch ich versuche erfolglos die params.json per Javascript abzufragen. :(

Code: Alles auswählen

$.getJSON('http://192.168.1.220/params.json', function (jd) {
...
};
Dabei erscheint folgender Fehler in den Entwickler-Werkzeugen von Firefox:

Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf http://192.168.1.220/params.json. (Grund: CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt).

Übrigens:
Wenn ich direkt im Browser die URL aufrufe (http://192.168.1.220/params.json), erscheinen die Daten.


Kann hier jemand weiterhelfen?
Vielen Dank.
paulinchen
Beiträge: 303
Registriert: Di 28. Feb 2017, 14:15

Mi 7. Jun 2017, 13:22

Hallo,
da die Abfrage mit Javascript nicht funktioniert hat, rufe ich jetzt in der Javascript-Routine eine php-Funktion auf, welche mir den Status der Marker aus der params.json ausliest und diese Info als Rückgabewert wieder an eine Javascript-Variable übergibt.
Ist zwar umständlich, funktioniert aber! :D
Benutzeravatar
Vardaaran
Beiträge: 97
Registriert: So 1. Jan 2017, 11:36

Mi 7. Jun 2017, 21:48

paulinchen hat geschrieben:
Mi 7. Jun 2017, 13:22
Hallo,
da die Abfrage mit Javascript nicht funktioniert hat, rufe ich jetzt in der Javascript-Routine eine php-Funktion auf, welche mir den Status der Marker aus der params.json ausliest und diese Info als Rückgabewert wieder an eine Javascript-Variable übergibt.
Ist zwar umständlich, funktioniert aber! :D
Könntest Du die Codes bitte posten?
Vielen Dank im Voraus!
paulinchen
Beiträge: 303
Registriert: Di 28. Feb 2017, 14:15

Fr 9. Jun 2017, 16:42

Hier die JS-Funktion (die "MARKER_POWER_SAT" usw. sind bei mir globale Variablen):

Code: Alles auswählen

//Funktion aktualisiert periodisch die globalen Markervariablen an Hand der Werte in der JSON-Datei "params.json"...
  function Marker_Auslesen(){
    //Datei http://lightmanger.ip/params.json auswerten...
    //"marker state":   "01000000000000000000000000000000"
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        document.getElementById("debug_label_params").innerHTML = this.responseText;
        var aktMarkers = this.responseText;
        if (aktMarkers[0] == 1) {MARKER_POWER_SAT = true} else {MARKER_POWER_SAT = false};
        if (aktMarkers[1] == 1) {MARKER_POWER_TV = true} else {MARKER_POWER_TV = false};
        if (aktMarkers[2] == 1) {MARKER_POWER_AMP = true} else {MARKER_POWER_AMP = false};
        if (aktMarkers[3] == 1) {MARKER_POWER_BLURAY = true} else {MARKER_POWER_BLURAY = false};
        if (aktMarkers[4] == 1) {MARKER_POWER_SKY = true} else {MARKER_POWER_SKY = false};
        if (aktMarkers[5] == 1) {MARKER_POWER_BEAMER = true} else {MARKER_POWER_BEAMER = false};
        if (aktMarkers[9] == 1) {MARKER_TVLIFT_OBEN = true} else {MARKER_TVLIFT_OBEN = false};
        if (aktMarkers[10] == 1) {MARKER_POWER_DECKE1 = true} else {MARKER_POWER_DECKE1 = false};
        if (aktMarkers[11] == 1) {MARKER_POWER_DECKE2 = true} else {MARKER_POWER_DECKE2 = false};
        if (aktMarkers[12] == 1) {MARKER_POWER_RGB1 = true} else {MARKER_POWER_RGB1 = false};
        if (aktMarkers[13] == 1) {MARKER_POWER_RGB2 = true} else {MARKER_POWER_RGB2 = false};
        if (aktMarkers[14] == 1) {MARKER_POWER_RGB3 = true} else {MARKER_POWER_RGB3 = false};
        if (aktMarkers[15] == 1) {MARKER_POWER_RGB4 = true} else {MARKER_POWER_RGB4 = false};
        //Dashboard aktualisieren...
        Marker_Auswerten();
      }
    };
    xmlhttp.open("GET", "ths_params.php", true);
    xmlhttp.send();
  };

hier die Datei "ths_params.php" (die IP 192.168.1.220 ist bei mir die IP des LMA):

Code: Alles auswählen

<?php
  $hint = "";
  $request2 = file_get_contents("http://192.168.1.220/params.json");
  $json2 = json_decode($request2, true);
  $hint = $json2['marker state'];
  echo $hint === "" ? "ERROR" : $hint;
?>
Antworten