Virtual output to retrieve data

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • noelie
    Dumb Home'r
    • 17.01.2021
    • 18

    Virtual output to retrieve data

    Hallo, ich habe einen sensoterra Bodenfeuchtesensor, den ich in Loxone integrieren möchte. Sie verfügen über eine Cloud-Plattform, mit der ich eine Verbindung herstellen und Daten abrufen kann.
    Ich konnte dies über Home Assistant mit dem folgenden Code tun:

    Code:
    sensor:
      - platform: rest
        name: SensorTerra Data
        resource: https://monitor.sensoterra.com/api/v3/probe
        method: GET
        headers:
          api_key: "MY SECRET"
          accept: "application/json"
          language: "en"
        value_template: '{{ value_json[0].status.last_reading }}'
        scan_interval: 300 # Adjust the update interval as needed (in seconds)​
    und ich kann auch CURL-Befehle posten und bekomme eine gute Antwort.

    curl -X GET "https://monitor.sensoterra.com/api/v3/probe" -H "accept: application/json" -H "language: en" -H "api_key: MY SECRET"

    Allerdings kann ich den virtuellen Ausgang in Loxone nicht richtig konfigurieren. Ich hatte gehofft, dass mir jemand einen Rat geben kann.
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Loxone Sensoterra.png
Ansichten: 746
Größe: 86,6 KB
ID: 401060


    Dies ist die API-Dokumentation von Sensoterra


    Vielen Dank!
  • Pentium789
    Smart Home'r
    • 04.11.2019
    • 78

    #2
    Hallo noelie, entweder hab ich etwas falsch verstanden oder du hast dich verschrieben....

    du willst doch Daten vom Sensor in Loxone einbinden oder?
    dann ist doch der Virtuelle Ausgang falsch, du musst einen Virtuellen Eingang benutzen.

    hier noch die Dokumentation von Loxone zu Virtuellen HTTP Eingängen
    https://www.loxone.com/dede/kb/virtu...eingef%C3%BCgt.


    LG
    Daniel
    Zuletzt geändert von Pentium789; 19.08.2023, 15:20.

    Kommentar

    • noelie
      Dumb Home'r
      • 17.01.2021
      • 18

      #3
      Hallo Pentium, tut mir leid, dass ich das über Google Translate mache. Möglicherweise wurde etwas falsch übersetzt.
      Ich möchte einen Befehl an die Sensorterra-Website senden, die dann dem Loxone-Miniserver antwortet. Diese Antwort wird dann in einer Textdatei gespeichert (http-Antwort speichern wurde aktiviert).
      Die Antwort liegt im JSON-Format vor und dann muss ich eine virtuelle Eingabe verwenden, um die Datei zu analysieren und den richtigen Wert zu finden.
      Dasselbe mache ich auch für Solcast.​​

      Kommentar

      • Pentium789
        Smart Home'r
        • 04.11.2019
        • 78

        #4
        Alles klar verstehe, schreib mal deinen Befehl bei "Command for ON" rein

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

Name: image.png
Ansichten: 380
Größe: 34,5 KB
ID: 401092

        dann sollte da eigentlich funktionieren, mit HTTP header for ON hab ich noch nie gearbeitet

        LG​

        Kommentar

        • Tico
          Lox Guru
          • 31.08.2016
          • 1035

          #5
          Ich würde diese Variante ausprobieren -

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

Name: Virtual Output 1.png
Ansichten: 353
Größe: 13,3 KB
ID: 401115

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

Name: Virtual Output2.png
Ansichten: 348
Größe: 38,0 KB
ID: 401116
          Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

          Kommentar


          • noelie
            noelie kommentierte
            Kommentar bearbeiten
            Das funktioniert! Vielen Dank für die Hilfe. Ich hasse es wirklich, virtuelle Ausgänge verwenden zu müssen, um Daten zu erhalten. Es ist immer ein Rätsel herauszufinden, was man wo genau ausfüllen muss.
        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11220

          #6
          Wenn du einen Virtuellen Ausgang verwendest, bekommst du keine Daten vom Request zurück.

          Wenn du einen Virtuellen HTTP-Eingang verwendest, kannst du keine HTTP-Header oder POST-Daten senden.

          Leider eine grobe Einschränkung der Loxone HTTP-Schnittstelle.
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar


          • Tico
            Tico kommentierte
            Kommentar bearbeiten
            Hallo Christian Fenzl

            meine Erfahrungen mit dem Virtual Output Command sind anders. Ich habe den Befehl "Save HTTP Reply" in einer Reihe von verschiedenen Anwendungen verwendet, um die zurückgegebenen Daten von POST- und GET-Anfragen zu speichern.

          • Christian Fenzl
            Christian Fenzl kommentierte
            Kommentar bearbeiten
            Ja, das ist ein schmutziger Workaround.
        • noelie
          Dumb Home'r
          • 17.01.2021
          • 18

          #7
          Nächste Frage. Mir ist aufgefallen, dass der API-Schlüssel nur 24 Stunden gültig ist, daher möchte ich alle 24 Stunden eine virtuelle Ausgabe an den Sensoterra-Server senden, den API-Schlüssel in einer Datei abrufen und dann den API-Schlüssel in der Datei mithilfe einer virtuellen Eingabe lesen Verwenden Sie den API-Schlüssel in der virtuellen Ausgabe, um die Daten anzufordern.

          Die API wird über einen POST-Befehl angefordert. Ich habe den ganzen Morgen mit zahlreichen Setups versucht, dies zum Laufen zu bringen, aber wieder kein Glück. Hat jemand eine Idee?
          Die E-Mail-Adresse und das Passwort müssen im Nachrichtentext enthalten sein.

          Code:
          curl -X POST "https://monitor.sensoterra.com/api/v3/customer/auth" -H "accept: application/json" -H "language: en" -H "Content-Type: application/json" -d "{ \"email\": \"joe@somewhere.org\", \"password\": \"my_secret\"}"


          When I run the Curl command with my credentials I get the following response
          Code:
          {
            "notifications_email": "OFF",
            "notifications_app": "ON",
            "role": "CUSTOMER",
            "email": "xxx@xxx.nl",
            "id": "6785",
            "disclaimer_agreed": "YES",
            "api_key": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTI2MjUyMTMsImF1ZCI6InN0LW1vbml0b3JfYXBpX3YzIiwic3ViIjoiNjc4NSIsInJvbGUiOiJDVVNUT01FUiJ9.bB_Xw4StYMLliCnr5DQht1u2Bjg44D6ZJqpherhlX7h",
            "expires_in": 86400
          }​
          The API key is 181 characters long​
          Zuletzt geändert von noelie; 20.08.2023, 15:44.

          Kommentar


          • Tico
            Tico kommentierte
            Kommentar bearbeiten
            Wie viele Zeichen enthält der API-Schlüssel? Die Anzahl der Zeichen im API-Schlüssel bestimmt, ob dieser Weg gangbar ist oder ob ein externes Gerät wie ein Loxberry benötigt wird.

          • noelie
            noelie kommentierte
            Kommentar bearbeiten
            Hallo Tico, der API-Schlüssel ist 181 Zeichen lang. Ich habe den ursprünglichen Beitrag mit der Antwort bearbeitet, die ich mit dem Curl-Befehl erhalte.
            Wenn ich diesen API-Schlüssel in Loxone verwende, um Sensordaten abzurufen, funktioniert es. Oder sind Sie besorgt über den Post-Befehl zum Abrufen des API-Schlüssels?
        • Tico
          Lox Guru
          • 31.08.2016
          • 1035

          #8
          Eine weitere große Einschränkung von Loxone ist, dass es keine Textstrings parsen kann. Es kann nur numerische Werte oder den ASCII-Wert einzelner Zeichen analysieren. Ich bin mir sicher, dass wir herausfinden können, wie wir den Befehl Virtual Output POST erstellen können, um die oben dargestellte Antwort zu speichern. Das Problem ist das Extrahieren der 181 Zeichen als Zeichenkette.
          Wenn der vorige Schritt eine schmutzige Umgehung war, ist der folgende eine schmutzige, schmutzige Umgehung -


          Sie benötigen nicht weniger als 4 x A3-Seiten mit Statusblöcken, um eine Textzeichenfolge mit 181 Zeichen zu analysieren. Wahrscheinlich ist es Zeit für einen Loxberry?
          Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

          Kommentar


          • noelie
            noelie kommentierte
            Kommentar bearbeiten
            Ich verstehe was du meinst. Um alle einzelnen Zeichen lesen zu können, benötigen Sie 181 virtuelle Eingaben. Ändern Sie dann die Bytewerte in ASCII-Zeichen.
            Wie würden Sie den POST-Befehl aufbauen, damit ich den API-Schlüssel abrufen kann? Nur aus Neugier.

            Ich werde den Sensorlieferanten kontaktieren und prüfen, ob er einen dauerhaften API-Schlüssel bereitstellen kann.
            Ich versuche, mich von Loxberry fernzuhalten, da ich versuchen möchte, in naher Zukunft den Heimassistenten zu implementieren, um alles zu integrieren, was Loxone nicht kann.
        • Pentium789
          Smart Home'r
          • 04.11.2019
          • 78

          #9
          Ja das ist ein großes Problem an den virtuellen Eingängen von Loxone, hätte ich auch schon mal gebraucht.... man kann ihm leider nicht sagen lese die nächsten 181 Zeichen oder so als String...

          Ich wollte schon mal ein Datum einlesen ist aber nicht gegangen, da ich die Webseite wo ich Daten einlesen wollte selbst programmiert habe, konnte ich das so ändern das ich Tag, Monat und Jahr in eine eigene Zeile gegeben damit ich das einlesen konnte mit 3 Virtuellen Eingängen und dann wieder über einen Statusbaustein zusammengebaut.

          LG

          Kommentar

          • Tico
            Lox Guru
            • 31.08.2016
            • 1035

            #10
            Der POST-Befehl zur Authentifizierung könnte folgendermaßen funktionieren -

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

Name: Virtual Output 3.png
Ansichten: 436
Größe: 12,7 KB
ID: 401295

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

Name: Virtual Output 5.png
Ansichten: 316
Größe: 39,2 KB
ID: 401296


            Ich fühle mich etwas unwohl bei der Verwendung der Backslashes im HTTP-Body für ON. Ich habe den HTTP-Body für OFF nur als Platzhalter für eine Alternative zum Ausprobieren verwendet. Eine ähnliche API, die ich verwendet habe, hatte das zweite Format.

            Ich bin auch neugierig zu sehen, ob beide Varianten funktionieren. Die Befehle für die virtuelle Ausgabe können sich zu einer Kunstform entwickeln...

            In Anbetracht der Tatsache, dass der Home Assistant in Zukunft in Ihr Haus integriert werden könnte, vermute ich, dass Sie einen Raspberry Pi verwenden werden? Eine vielseitige Option ist Node-Red, das parallel auf dem Pi betrieben werden kann. Node-Red hat eine direkte Integration mit Loxone. In der Abbildung unten sende ich den API-Schlüssel direkt an eine virtuelle Texteingabe. Sie können dann die Authentifizierung im Miniserver durchführen.

            Eine viel einfachere Alternative ist es, alle Authentifizierungen und Anfragen innerhalb von Node-Red abzuwickeln und die Sensorwerte an Loxone zu senden.


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

Name: Node-Red2.png
Ansichten: 318
Größe: 41,8 KB
ID: 401297
            Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

            Kommentar


            • noelie
              noelie kommentierte
              Kommentar bearbeiten
              Tico, du bist ein Held! Ihre Lösung im Bereich „Body for OFF“ funktioniert.
              Haben Sie schon einmal versucht, in PicoC etwas zu schreiben, um einen String zu extrahieren? Ansonsten sieht die NodeRed-Option wie der nächste Schritt aus.
          • noelie
            Dumb Home'r
            • 17.01.2021
            • 18

            #11
            So konnte ich endlich den API-String erstellen, der in den POST-Befehl eingefügt werden soll. Tico, lache nicht, aber ich habe ganze 2 Seiten mit Statusblöcken nur zu Testzwecken erstellt.
            Kann es jedoch sein, dass eine virtuelle Ausgabe mit einem String-Befehl <v> im Header nicht funktioniert?

            Um noch einmal zu überprüfen, ob der API-Schlüssel funktioniert, habe ich eine separate virtuelle Ausgabe erstellt und den API-Schlüssel direkt in den Header eingefügt, wie vor ein paar Beiträgen erwähnt, und es hat funktioniert.
            Dann habe ich einen zweiten Statusblock erstellt, um zu überprüfen, ob der String mit dem übereinstimmt, den ich im Teststatusblock sende, und ob der Text genau derselbe ist.​ Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Loxone virtual output header.png
Ansichten: 384
Größe: 113,8 KB
ID: 401644

            Kommentar

            • Tico
              Lox Guru
              • 31.08.2016
              • 1035

              #12
              Es gibt zwei Varianten, die im HTTP-Header für On funktionieren könnten.

              Erste -
              Code:
              Content-Type: application/json\r\nlanguage: en\r\napi_key: <v>
              Hier wird nur der api_key-String aus dem letzten Status-Block übergeben.

              Zweitens -

              Der gesamte HTTP-Header für On wird im letzten Status-Block gebildet.

              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Authentication.png Ansichten: 0 Größe: 30,2 KB ID: 401656



              Ihr Beispiel scheint der zweiten Variante näher zu kommen (<v> in der HTTP-Kopfzeile für On), aber es fehlt der

              Code:
              Content-Type: application/json\r\nlanguage: en\r\n
              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Mistake.png Ansichten: 0 Größe: 8,7 KB ID: 401657
              Zuletzt geändert von Tico; 25.08.2023, 01:40.
              Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

              Kommentar

              Lädt...