Virtueller HTTP Eingang / Fehlende Daten in der Response

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • jokay
    Dumb Home'r
    • 15.08.2022
    • 15

    Virtueller HTTP Eingang / Fehlende Daten in der Response

    Hallo Zusammen

    Ich versuche bei Loxone mittels virtuellem HTTP Eingang die Gefahrendaten von https://app-prod-ws.meteoswiss-app.c...ail?plz=390000 auszuwerten.

    Das klappt soweit ganz gut, bis zu dem Zeitpunkt wo keine Gefahr mehr für den betroffenen Typ gesendet wird und der alte Wert bestehen bleibt.

    Repro
    • Aufruf https://app-prod-ws.meteoswiss-app.c...ail?plz=390000
    • Befehlserkennung
      Code:
      "warnType":10,"warnLevel":\v
    • 5 für die aktuelle Stufe wird ausgelesen
    • Sobald keine Gefahr mehr besteht für den warnType 10 bleibt der alte Wert bestehen (kann z.B. mit Befehlserkennung
      Code:
      "warnType":7,"warnLevel":\v
      getestet werden).
    Ich habs bereits mit dem Fehlerausgang versucht aber ich vermute der funktioniert nur bei einem Timeout oder wenn gar keine Daten zurückgeliefert werden, nicht aber wenn die Befehlserkennung keine Werte mehr findet.

    Hat evtl. jemand eine Idee, wie man diesen wert auf 0 setzen könnte, wenn die Befehlserkennung keinen Wert ermitteln kann, sowas wie einen Default Wert scheint es da ja nicht zu geben?
    Zuletzt geändert von jokay; 15.08.2022, 09:09.
  • jokay
    Dumb Home'r
    • 15.08.2022
    • 15

    #2
    Bitte nach Software: Konfiguration, Programm und Visualisierung verschieben.

    Kommentar

    • romildo
      Lebende Foren Legende
      • 25.08.2015
      • 5113

      #3
      Hallo, sorry, ich verstehe nicht, was da jetzt wann und in welchem Typ ankommt.
      Kannst Du bitte nochmals genauer beschreiben, was wo ankommt,
      a) wenn Gefahr besteht und
      b) wenn keine Gefahr mehr besteht
      lg Romildo

      Kommentar

      • jokay
        Dumb Home'r
        • 15.08.2022
        • 15

        #4
        Ok, wenn Gefahr (Hitze, warnType 7) besteht sieht die JSON response so aus (hier nur die relevanten parts):

        HTML-Code:
        {
          "currentWeather": {
            ...
          },
          "forecast": [
            ...
          ],
          "warnings": [
            {
              "warnType": 7,
              "warnLevel": 3,
              ...
            },
            {
              "warnType": 10,
              "warnLevel": 5,
              ...
            }
          ],
          "warningsOverview": [
            ...
          ],
          "graph": {
            ...
          }
        }
        Sobald keine Gefahr mehr besteht erscheint der entsprechende warnType 7 nicht mehr in der JSON response:

        HTML-Code:
        {
          "currentWeather": {
            ...
          },
          "forecast": [
            ...
          ],
          "warnings": [
            {
              "warnType": 10,
              "warnLevel": 5,
              ...
            }
          ],
          "warningsOverview": [
            ...
          ],
          "graph": {
            ...
          }
        }
        Da es faktisch keinen neuen Wert gibt, bleibt der alte Wert 3 bestehen, obwohl ich eigentlich 0 erwarten würde, wenn die Befehlserkennung keine neuen Wert in der JSON response ermitteln kann.

        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 49,7 KB ID: 355105
        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 81,9 KB ID: 355106

        Auch das Aktivieren der Validierung scheint nicht als fallback den Standardwert 0 zu verwenden

        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 12,1 KB ID: 355108

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

Name: image.png
Ansichten: 392
Größe: 9,9 KB
ID: 355111

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

Name: image.png
Ansichten: 393
Größe: 74,7 KB
ID: 355112
        Zuletzt geändert von jokay; 15.08.2022, 16:03.

        Kommentar

        • romildo
          Lebende Foren Legende
          • 25.08.2015
          • 5113

          #5
          OK, also möchtest Du den Wert vom HTTP Eingangsbefehl mit der Bezeichnung "MeteoSwiss Details" auf 0 setzen.

          Das ginge mittels Webservice Befehl indem Du eine 0 an den Eingangsbefehl schickst.
          Dazu legst Du einen Virtuellen Ausgang an, als Adresse kommt die Adresse des Miniservers rein.
          Code:
          http://user:passwort@IPMiniserver
          dann noch einen analogen Ausgangsbefehl, Befehlserkennung bei EIN
          Code:
          /dev/sps/io/MeteoSwiss Details/0
          lg Romildo

          Kommentar

          • jokay
            Dumb Home'r
            • 15.08.2022
            • 15

            #6
            Und wie soll das aussehen, 1x um Mitternacht auf 0 setzen lassen und um 00:10 wird dann falls eine Gefahr besteht wieder die korrekte Stufe gesetzt oder geht das auch mehr 2022 und weniger 1980?

            Kommentar


            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Mit Loxone nicht. Wie oft du auf 0 setzt, und was du mit dem Wert - wenn einer anliegt - a stellst, ist aber dir überlassen.

              Du kannst aber auch zb am LoxBerry das JSON parsen und den Wert oder 0 an den Miniserver senden.
          • jokay
            Dumb Home'r
            • 15.08.2022
            • 15

            #7
            Christian Fenzl ok, danke für die Info. Aktuell versuche ich noch LoxBerry zu vermeiden und alles per MiniServer zu lösen aber dann muss ich wohl meine Herangehensweise überdenken

            Kommentar

            • jokay
              Dumb Home'r
              • 15.08.2022
              • 15

              #8
              Danke euch für die Infos und Hilfe.

              Kommentar

              • romildo
                Lebende Foren Legende
                • 25.08.2015
                • 5113

                #9
                Hier ein Beispiel wie ich es versuchen würde

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

Name: StatusZurücksetzen.png
Ansichten: 504
Größe: 141,4 KB
ID: 355127
                lg Romildo

                Kommentar

                • svethi
                  Lebende Foren Legende
                  • 25.08.2015
                  • 6289

                  #10
                  Ich bin ja der Meinung, dass hier schon die Befehlserkennung nicht so gut ist da keine Steuerzeichen berücksichtigt werden. Ich denke, wenn die Befehlserkennung korrekt ist, dürfte der Eingang keine Daten erhalten und damit auch nach Zeitspanne auf Fehler gehen. Allerdings würden die dann tatsächlich auf Fehler gehen und melden.
                  Man könnte natürlich zusätzlich auf "warnType": 10 prüfen. Digital als Puls und dann mit Zeitverzögerung die Wert auf 0 setzen wenn innerhalb Zeit X kein neuer Impuls gekommen ist
                  Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

                  Kommentar

                  • Christian Fenzl
                    Lebende Foren Legende
                    • 31.08.2015
                    • 11200

                    #11
                    Ich hab vor langer Zeit dazu ein Ticket bei Loxone gemacht, dass der Fehlerausgang des VI auf 1 gehen müsste, wenn die Verbindung fehlschlägt oder die Suche kein Ergebnis liefert.
                    Das ist wie immer unberücksichtigt geblieben.

                    Dass man ständig Fehler in der App kriegt, obwohl ein Loxone-Config-Stoppler einen Fehlerausgang per Logik abfangen kann, und das Melden in der App für einen VI nicht abschaltbar ist, hatte ich auch mal als Ticket eingebracht.

                    Arrays in Daten sind immer problematisch, wenn das Zielsystem die Datenstruktur nicht kennt, bzw. wie im Falle von Loxone, auf das Datenmodell nicht ausreichend reagieren kann (zb durch den eigentlich eh vorhandenen Fehlerausgang).

                    Du musst - wie Sven/Romildo beschrieben haben - bei einem eingehenden, gesuchten Wert diesen per zb Ausschaltverzögerung speichern, und diese immer wieder verlängern, wenn der Wert erneut eintrifft. Dazwischen setzt du den Wert per lokalem Ausgangsbefehl auf 0.
                    Wenn die Ausschaltverzögerung abfällt, ist die Warnung offensichtlich nicht mehr aktiv, also Status GRÜN.
                    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                    Kommentar

                    • jokay
                      Dumb Home'r
                      • 15.08.2022
                      • 15

                      #12
                      Vielen Dank für eure Rückmeldungen.

                      Da es ca. 7 verschiedene Warnungen sind, gibt es evtl. eine Möglichkeit, wie man das Zurücksetzen generell handeln könnte anstatt das alles x-mal zu hinterlegen?

                      Kommentar

                      • jokay
                        Dumb Home'r
                        • 15.08.2022
                        • 15

                        #13
                        Kleines Update, habs jetzt mit einem .NET Core webservice als Docker container gelöst, der jeweils 0 zurückgibt, wenn kein Wert als JSON vorhanden ist.

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

Name: image.png
Ansichten: 254
Größe: 90,0 KB
ID: 403218

                        Da ich den webservice auch noch für eine weitere Schnittstelle verwende, da Loxone auch keine OAuth kann, hat sich das so angeboten

                        Schade geht das nicht nativ mit Loxone aber dafür geht ja sonst viel.

                        Kommentar

                        Lädt...