Virtuellen HTTP Eingang auf "Text vorhanden?"

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

    Virtuellen HTTP Eingang auf "Text vorhanden?"

    Hallo,

    möchte aus der Website des ISG von Stiebel Eltron ein paar Daten auslesen und in der Statistik darstellen.
    Alle Daten mit Werte z.B. Temperatur, Drehzahl, Feuchte... hab ich bereits da.

    Habe aber noch Aktoren, die in der Website dargestellt werden, wenn diese Aktiv sind, sonst nicht. (Siehe Bild)
    Mein Ziel ist es, das Vorhandensein bzw. "aktiv" eines Aktors in einem Boolschen Wert einzulesen.

    Bekomme das nicht hin.
    Hat jemand eine Idee?
    Mir würde schon reichen, wenn ich eine Befehlserkennung hätte und der Wert sich ändert, wenn der Text vorhanden ist...
    Geht das mit Loxone?
  • romildo
    Lebende Foren Legende
    • 25.08.2015
    • 5113

    #2
    Hallo
    Vielleicht so auf diese Art.

    Wenn beispielsweise im Quelltext true oder false steht könntest Du die Befehlserkennung nach dem ersten Zeichen abfragen und in einem Statusbaustein dann die Entscheidung treffen.
    Beispiel:
    Quelltext wenn aktiv: Zirkulationspumpe True
    Quelltext wenn inaktiv: Zirkulationspumpe False

    Befehlserkennung: Zirkulationspumpe \1
    Als Rückgabewert sollte dann für das erste Textzeichen der jeweilige Wert kommen.
    Rückgabewert wenn True = 84
    Rückgabewert wenn False = 70

    Den Eingang hängst Du an einen Statusbaustein z.B. AI1.
    Im Statusbaustein findet dann die Entscheidung für Loxone statt:
    AI1 = 84, Statustext: True
    AI1 = 70, Statustext: False

    Zuletzt geändert von romildo; 23.04.2017, 15:52.
    lg Romildo

    Kommentar

    • Gast

      #3
      Das habe ich schon versucht, das Problem ist nur, dass es keinen Wert True oder False gibt.
      Wenn der Aktor/Ausgang geschalten ist, dann steht der Text in der Html, sonst ist der Text nicht vorhanden. d.H. wenn der Text in der HTML nicht auftaucht, ändert sich auch der Wert nicht(So meine Vermutung)

      Der Syntax in der html sieht so aus...
      Zuletzt geändert von Gast; 19.01.2017, 15:08.

      Kommentar


      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Leider nicht...
        Die ganze Zeile verschwindet inkls. Icon...
        Oder meist du was anderes? Oder verstehe ich das falsch?

      • svethi
        svethi kommentierte
        Kommentar bearbeiten
        Achso, das ist ja blöd. Geht aber trotzdem.
        Suche den entsprechenden Aktor und frage mit \1 das folgende Byte ab. Ist der Aktor vorhanden steht ein Werte im Byte, ist er nicht vorhanden steht kein Wert im Byte. Problem ist nur ... war er schon da, wird der Wert nicht zurück gesetzt. Also muss Du bei der Validierung noch die Zeit angeben bis der Wert wieder auf Standard (0) zurück gesetzt wird, wenn kein Wert empfangen wurde. Diese Zeit setzt Du einen Tick länger als die Zeit refreshzeit des HTTP-Eingangs.

      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Hallo Sven
        Genau das wollte ich machen.
        Habe aber niergends einen Zeiteintrag dafür gefunden. Wo genau ist diese Zeit zu finden?
    • romildo
      Lebende Foren Legende
      • 25.08.2015
      • 5113

      #4
      Tja, da habe ich leider keine einfache Löung parat.
      Wenn es Dir nicht zu umständlich ist und es egal ist, wenn der Status etwas verzögert kommt, könntest Du folgendes machen:
      HTTP - Eingang mit der Bezeichnung "Zirkulationspumpe" Befehlserkennung: ZIRKULATIONSPUMPE\1
      Impulsgeber, welcher in Zeitabständen <10 Impulse abgibt.
      Virtueller Ausgang (http://Dein Miniserver) und Ausgangsbefehl welcher den Eingang "Zirkulationspumpe" auf 0 setzt. -> Befehl bei EIN: /dev/sps/io/Zirkulationspumpe/0
      Ausschaltverzögerung T > 10

      Kurzbeschreibung:
      Sofern der im HTTP-Eingang gesuchte Befehl vorhanden ist, kommt ein Wert welcher die Ausschaltverzögerung einschaltet.
      Der HTTP-Eingang wird durch den Impulsgeber über den virtuellen Ausgang wieder auf 0 gesetzt.
      Kommt erneut ein Wert über den HTTP-Eingang bleibt die Ausschaltverzögerung auf EIN, ansonsten geht sie nach Ablauf der Zeit auf AUS.

      Ein Bild sagt vermutlich etwas mehr aus:
      Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Zirkulationspumpe1.png Ansichten: 1 Größe: 11,6 KB ID: 78751
      lg Romildo

      Kommentar


      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Ist es möglich, dass Du mehrere Bezeichnungen mit Zirkulationspumpe hast?
        Gib an Stelle von der Bezeichnung mal den Anschluss ein.

      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Stimmt, hatt sich überschnitten.
        Vom Webbrowser gehts jetzt aber vom Ausgang nicht... muss ich da auch user und passwort mitgeben?
        Muss der Befehl nicht in den http-Befehl rein?

      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Kannst es auch über 127.0.0.1 versuchen, bei mir funktioniert dies aber nicht.
        Ansonsten leider nur mit user und passwort.
    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11200

      #5
      Svethis Lösung mit dem Standardwert nach Timeout wäre die eleganteste, aber soweit ich mich erinnere, funktioniert das gar nicht (Bug).
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar


      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Finde ich auch, aber diese Zeiteinstellung finde ich nur bei den UDP und nicht bei den HTTP Eingängen.
    • svethi
      Lebende Foren Legende
      • 25.08.2015
      • 6289

      #6
      Also eigentlich funktioniert das bei mir. Bug ist mir nicht bekannt/aufgefallen
      Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

      Kommentar


      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        mit welcher Version? Ich kann es auch nicht finden...

      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Und wo muss/kann man diese Zeit einstellen?
    • Gast

      #7
      Habs jetzt so gelöst, wie im Bild...
      Einschaltverzögerung auf 59,9 Sec.
      Virtueller Ausgang mit Wiederholung auf 60 Sec.

      Vielen Dank für die Unterstützung.

      Kommentar


      • romildo
        romildo kommentierte
        Kommentar bearbeiten
        Vermutlich habe ich den Aufbau doch nicht ganz verstanden. Oder ist dies nur der Teil an Stelle des Impulsgebers?
        Wenn es nur ein Teil der Schaltung ist, könntest Du bitte, für die Nachwelt, ein Bild der kompletten Funktion ins Forum stellen?

        Wenn es alles ist, könntest Du es mir noch etwas genauer erklären?

        Du hängst den HTTP-Eingang an eine Einschaltverzögerung. Welcher Abfragezyklus?
        An den Ausgang hängst Du einen HTTP-Ausgang welcher den HTTP-Eingang auf AUS setzt, oder liege ich da falsch?
        Einschaltverzögerung 59.9 Sekunden
        Virtueller Ausgang welche Wiederholung auf 60 Sekunden, Erste oder Abstand?
        Zuletzt geändert von romildo; 20.01.2017, 10:33.
    • Gast

      #8
      Genau, der HTTP-Eingang läuft in einem Zyklus von 60s.
      Also setze ich kurz vor einem neuen Zyklus/Abfrage den Wert zurück, wenn der Wert/Befehl in der HTML dann vorhanden ist, wird der Eingang wieder gesetzt.
      Ist dies nicht der Fall, bleibt der Wert auf 0.
      Die Wiederholung könnte man eigentlich auch weglassen. ist aber zur Sicherheit drin, falls mal das erste zurücksetzen nicht angekommen ist...

      Kommentar

      • romildo
        Lebende Foren Legende
        • 25.08.2015
        • 5113

        #9
        So hier noch das angepasste Bild wie ich es verstanden habe:


        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Zirkulationspumpe2.png Ansichten: 1 Größe: 11,9 KB ID: 78895

        Noch einfachere Lösung:
        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Zirkulationspumpe3.png
Ansichten: 1590
Größe: 9,1 KB
ID: 78976
        Zuletzt geändert von romildo; 20.01.2017, 17:21.
        lg Romildo

        Kommentar


        • svethi
          svethi kommentierte
          Kommentar bearbeiten
          Ich arbeite auch viel mit UDP. Ich möchte jetzt nicht schwören das es die Verzögerung auch bei den HTTP-Eingängen möglich ist. Ich gucke dann mal.
          Hätte aber noch ne andere Idee ohne kurze Schaltphase.
          Den Eingangsbefehl auf digital setzen, dann gibt es ja eh nur einen Impuls. Der geht an eine Ausschaltverzögerung, die über der refreshzeit liegt. Kommt in der Zeit ein weiterer Impuls läuft die Ausschaltverzögerung neu los, kommt keiner, schaltet er aus.
          Geht das, oder gibts da schon wieder irgendwelche Einschränkungen?

        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Den Eingangsbefehl kann man bei HTTP leider auch nicht auf Digital stellen.

        • svethi
          svethi kommentierte
          Kommentar bearbeiten
          So, jetzt habe ich da auch mal reingesehen. Das ist ja wirklich verzwickt. Alle Workarrounds gehen nicht, da es da dann wieder fehlende Parameter oder dergleichen gibt.
          Ich würde dann so ähnlich wie tweaker einen Impuls erzeugen (Wert direkt nach dem setzen wieder auf false setzen) und damit dann auf die Ausschaltverzögerung gehen.
      • Christian Fenzl
        Lebende Foren Legende
        • 31.08.2015
        • 11200

        #10
        Mir fällt wieder ein, was bei HTTP nicht funktioniert: Der Fehlerausgang.
        Wird der Wert nicht gefunden, geht der Fehlerausgang nicht auf 1.
        Das wäre nämlich die eleganteste Lösung.
        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

        Kommentar


        • romildo
          romildo kommentierte
          Kommentar bearbeiten
          Ja der geht nur auf EIN, wenn der Wert ausserhalb des Analogbereichs liegt.
          Denke aber, dass dies von Loxone so gewünscht ist.
          Einstellmöglichkeiten wie beim UDP sähe ich als Lösung. Also zusätzliche Felder für Zeitüberschreitung und als Digitaleingang verwenden.
      • hodojazi
        Extension Master
        • 03.10.2016
        • 102

        #11
        Stehe vor demselben Problem, dass der abzufragende JSON-Property beim gewünschten digital 0 in Loxone im JSON nicht vorhanden ist und ich praktisch nur die Präsenz des Strings erkennen muss.

        Ich habe aus diesem Thread nicht ganz verstanden ob einer der Workarounds funktioniert hat. Das mit dem Zurücksetzen des Wertes habe ich nicht verstanden, zumal der Virtuelle Eingang Befehl ja den Wert nie ändert, wenn der String nicht gefunden wurde und der Fehlerausgang 0 bleibt. Kann mir hier jemand von euch auf die Sprünge helfen?

        Besten Dank.

        Kommentar

        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11200

          #12
          Kannst du mal die Original-Responses mit und ohne Property senden (verwende Code-Tags). Vielleicht lässt sich da tricksen.
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar

          • hodojazi
            Extension Master
            • 03.10.2016
            • 102

            #13
            Die JSON ist relativ groß. Der relevante Teil ist folgender:

            Code:
            {
            "_id": "5984aa1712302c78b9cafac4",
            "_is_guest_by_uap": false,
            "_last_seen_by_uap": 1560974253,
            "_uptime_by_uap": 5939,
            "ap_mac": "80:2a:a8:.....",
            "assoc_time": 1560966833,
            "authorized": true,
            "bssid": "82:2a:a8:c1:....",
            "bytes-r": 65,
            "ccq": 418,
            "channel": 11,
            "essid": "....",
            "first_seen": 1501866519,
            "hostname": "Mobiltelefon",
            "idletime": 2,
            "ip": "192.168.0.230",
            "is_11r": false,
            "is_guest": false,
            "is_wired": false,
            "last_seen": 1560974253,
            "latest_assoc_time": 1560968314,
            "mac": "....",
            "noise": -110,
            "noted": false,
            "oui": "XiaomiCo",
            "powersave_enabled": true,
            "qos_policy_applied": true,
            "radio": "ng",
            "radio_proto": "ng",
            "roam_count": 11,
            "rssi": 51,
            "rx_bytes": 18041868,
            "rx_bytes-r": 60,
            "rx_packets": 154191,
            "rx_rate": 1000,
            "signal": -45,
            "site_id": "58418dc3cd2ce3250cdbdead",
            "tx_bytes": 89192703,
            "tx_bytes-r": 5,
            "tx_packets": 186025,
            "tx_power": 34,
            "tx_rate": 58500,
            "uptime": 7420,
            "user_id": "5984aa1712302c78....",
            "vlan": 0
            },
            Wenn das Gerät offline ist, dann fehlt das komplette object im Array in der JSON. Ich würde dann gerne nach
            Code:
            "hostname": "Mobiltelefon"
            suchen und eine 1 in Loxone haben, wenn er gefunden wird, ansonsten, 0.
            Zuletzt geändert von hodojazi; 19.06.2019, 22:07.

            Kommentar

            • Christian Fenzl
              Lebende Foren Legende
              • 31.08.2015
              • 11200

              #14
              Code:
              "first_seen": 1501866519,
              "hostname": "Mobiltelefon",
              "idletime":
              Probier mal, das first_seen zu suchen, dann das nächste Komma, und nach dem Anführungszeichen \1.

              Etwa (ungetestet)

              "first_seen": \#,"\1
              Wenn Zeilenumbrüche drin sind, oder Leerzeichen, dann darauf auch aufpassen.
              Es müsste dann entweder der ASCII-Code von h (hostname) oder von i (idletime) kommen.
              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

              Kommentar

              • Tico
                Lox Guru
                • 31.08.2016
                • 1035

                #15
                Sicherlich haben Sie mit Plugin - Befehlserkennung getestet?

                Code:
                "first_seen": \#,\n"\1
                Liefert Wert -
                104 für h
                105 für i
                Ich spreche kein Deutsch. Gib Google Translate die Schuld, wenn ich unverständlich bin.

                Kommentar

                Lädt...