REST Webservice

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gast

    #1

    REST Webservice

    Hallo an alle

    Ich habe schon die Forumsuche strapaziert, aber irgendwie nichts passendes gefunden.

    Unsere Firma setzt Loxone zur Büroautomation ein. Ich habe die Aufgabe die Zustände der Lichtkörper auszulesen und zu Präsentationszwecken aufzubereiten. Da ja der Miniserver einen REST Webservice anbietet, sollte das ja einfach sein. Nur scheiter ich komplett bei der Abfrage. Wenn ich die Beispiele ausprobiere, bekomme ich kein bzw. eine fehlerhafte Ausgabe.

    Beispiel:
    Ich möchte wissen, ob im Büro 1 das Licht an ist. Der REST Befehl sieht so aus:



    das Ergebnis ist:

    {"LL": { "control": "dev/sps/io/LichtBuero1/state", "value": "", "Code": "500"}}

    Das Passwort ist aber richtig. Was mache ich falsch, bzw. wie bekomme ich Zugriff auf den/die Status? Für eine Antwort und ein funktionierendes Beispiel wäre ich sehr dankbar. Viele Grüße Thorsten Schröer
  • Jan W.
    Lox Guru
    • 30.08.2015
    • 1498

    #2
    Die URL ist falsch, es muss .../dev/... heißen. Damit solltest Du auf jeden Fall ein XML zurückgeliefert bekommen. Ansonsten den Namen des Bausteins überprüfen. Hab es gerade bei meinem MS getestet und es hat funktioniert. Ansonsten mal mit .../dev/sps/​changes die geänderten Objekte abfragen.

    Gruß Jan
    Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
    Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
    Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
    Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
    Node-RED: IKEA Tradfri

    Kommentar

    • Gerd Clever
      MS Profi
      • 24.07.2016
      • 642

      #3
      In der Loxone-Doku heißt der "value" auch nicht state sondern astate. Im Ergebnis sieht man auch, dass state dem control angehängt wurde und der value leer.

      Gruß Gerd
      Miniserver Gen 2, v13.1.11.17, 9x Extension, 2x Relay Extension, 4x 1-Wire, Türkontakte, Mobotix T25

      Wenn der Herr nicht das Haus baut, dann ist alle Mühe der Bauleute umsonst. (Psalm 127,1)

      Kommentar

      • Gast

        #4
        Vielen Dank euch

        Ich habe das Problem jetzt lösen können.

        Zum einen ist jdev schon richtig, da ich die JSON Antwort benötige und kein XML. Außerdem hatte ich die falsche Controlbezeichnung verwendet.

        Kommentar

        • Gerd Clever
          MS Profi
          • 24.07.2016
          • 642

          #5
          Gast Kannst du bitte den (funktionierenden) Befehl und das zugehörige Ergebnis hier noch einstellen? Außerdem würde mich noch interessieren, ob "LichtBuero1" eigentlich ein Eingang (Schalter?) oder ein Ausgang ist.
          Miniserver Gen 2, v13.1.11.17, 9x Extension, 2x Relay Extension, 4x 1-Wire, Türkontakte, Mobotix T25

          Wenn der Herr nicht das Haus baut, dann ist alle Mühe der Bauleute umsonst. (Psalm 127,1)

          Kommentar

          • Gast

            #6
            LichtBuero1 so heißt bei uns die die Config-Seite. Das ist natürlich quatsch. Der korrekte Befehl lautet:

            http://adminasswort@ip/jdev/sps/io/Beleuchtung1/state (so haben wir den entsprechenden Ausgang genannt)

            Das Ergebnis ist dann wunschgemäß:
            {"LL": { "control": "dev/sps/io/Beleuchtung1/state", "value": "0", "Code": "200"}} Hier das Ganze in meiner .NET Konsolenapp: using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://a.b.c.d"); byte[] cred = UTF8Encoding.UTF8.GetBytes("adminasswort"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred)); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // HTTP GET Console.WriteLine("Status Beleuchtung 1"); HttpResponseMessage response = await client.GetAsync("jdev/sps/io/Beleuchtung1/state"); if (response.IsSuccessStatusCode) { string erg = response.Content.ReadAsStringAsync().Result; //Console.WriteLine(erg); Lox obj = new Lox(erg); Console.WriteLine("Control: {0}\nValue: {1}\nCode: {2}", obj.LoxControl, obj.LoxValue, obj.LoxCode); } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("(Bitte Enter drücken)"); Console.ReadLine(); } public Lox(string json) { try { //var jsonObject = Json.Decode(json); //LoxControl = (string)jsonObject.LL.control; //LoxValue = (string)jsonObject.LL.value; //LoxCode = (string)jsonObject.LL.Code; JavaScriptSerializer jss = new JavaScriptSerializer(); var jsonObject = jss.Deserialize<dynamic>(json); LoxControl = (string)jsonObject["LL"]["control"]; LoxValue = (string)jsonObject["LL"]["value"]; LoxCode = (string)jsonObject["LL"]["Code"]; } catch (Exception ex) { } } public string LoxControl { get; set; } public string LoxValue { get; set; } public string LoxCode { get; set; } }

            Kommentar

            • Gerd Clever
              MS Profi
              • 24.07.2016
              • 642

              #7
              Danke!

              Verstehe ich richtig, "Beleuchtung1" ist die Bezeichnung eines digitalen Ausgangs? Die Loxone-Doku ist nicht ganz leicht zu lesen, da hier in den Beispielen ständig von "LichtWohnzimmer" die Rede, ohne Erklärung, was das sein soll:

              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: screen_20160825_164005.png
Ansichten: 419
Größe: 69,2 KB
ID: 53632

              Ich vermute, dass in allen Beispielen ein Eingang gemeint ist ...
              Angehängte Dateien
              Miniserver Gen 2, v13.1.11.17, 9x Extension, 2x Relay Extension, 4x 1-Wire, Türkontakte, Mobotix T25

              Wenn der Herr nicht das Haus baut, dann ist alle Mühe der Bauleute umsonst. (Psalm 127,1)

              Kommentar

              • Gast

                #8
                Gerd Clever

                Guten Morgen,

                stimmt, die Beispiele sind da eher Suboptimal. In dem Doku-Beispiel sieht man nicht, ob LichtWohnzimmer ein Eingang oder Ausgang ist. In meinem obigen Beispiel ist Beleuchtung1 der Ausgang an der zweiten Extention, welche das Licht im Büro 1 steuert. Wir werden jetzt allerdings alle Ein- und Ausgänge neu bezeichnen, damit man schon direkt am Namen erkennt was das für ein Port ist.

                Viele Grüße Thorsten Schröer

                Kommentar

                Lädt...