Ankündigung

Einklappen
Keine Ankündigung bisher.

Script Fehler wenn String keinen Wert liefert

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

    Script Fehler wenn String keinen Wert liefert

    Hallo liebes Forum,
    ich bin mir nicht sicher ob ich mit meinem Problem hier richtig bin, falls nicht bitte verschieben.

    Ich frage meine Hausgeräte ab und möchte sie in CV darstellen, das klappt auch soweit recht gut. Allerdings sind sie über Powerline verbunden, so dass es vorkommen kann, dass ein Gerät nicht gefunden wird. Es wird zwar alle 24 Std neu gesucht, und in der Regel werden dann auch wieder alle Geräte gefunden.
    Ich frage die Geräte mit zB folgenden item ab :
    Code:
     String statusback "Status [%s]" (Backofen) { http="<[http://192.168.11.230/homebus/device?language=de&type=OV_H5000&id=OV_H5000.-1609545647:60000:XSLT(backstatus.xsl)]" }
    Als Ausgabe bekomme ich zB "In Betrieb" Wenn nun das Gerät nicht abgefragt werden kann finde ich im Log
    Code:
    2020-04-04 03:19:16.994 [ERROR] [org.openhab.io.net.http.HttpUtil ] - Fatal transport error: java.net.NoRouteToHostException: Keine Route zum Zielrechner (Host unreachable)
    2020-04-04 03:19:17.008 [ERROR] [ab.binding.http.internal.HttpBinding] - No response received from 'http://192.168.11.230/homebus/device?language=de&type=OV_H5000&id=OV_H5000.-1609545647'
    Die CV läuft nun auch in einen Fehler und ist nicht mehr bedienbar, im Firefox bekomme ich

    Code:
     
    handleMessage@http://192.168.11.19:8080/cometvisu/script/cv-gecko.js:213:237260
    und im Chrome einen anderen Fehler

    Code:
    Error: Script error. at new construct (http://192.168.11.19:8080/cometvisu/script/cv-webkit.js:213:94517) at Object.qx.event.GlobalError.__cc() [as __cc] (http://192.168.11.19:8080/cometvisu/script/cv-webkit.js:213:93861) at http://192.168.11.19:8080/cometvisu/script/cv-webkit.js:213:6169
    Hätte jemand eine Idee was ich tun könnte ?


    Gruß

    Frank

    #2
    Zitat von firstfacility Beitrag anzeigen
    Hätte jemand eine Idee was ich tun könnte ?
    Eine Replay-Datei aufnehmen mit dem Fehler und die mir dann zukommen lassen dürfte am schnellsten zu einer Lösung führen: https://www.cometvisu.org/CometVisu/...replay-dateien

    Gruß
    Tobias

    Kommentar


      #3
      Danke für den Hinweis, sagst du mir noch bitte wie ich das mache als Anhang ist sie zu groß.

      Gruß
      Frank

      Kommentar


        #4
        Als zip-Datei packen?
        Gruß
        Tobias

        Kommentar


          #5
          logisch, sorry manchmal -....
          Angehängte Dateien

          Kommentar


            #6
            Das Problem ist hier nicht, dass der String keine Wert liefert, sondern einen Wert mit Zeilenumbrüchen. Und das macht die Antwort so kaputt, dass der Browser die nicht verarbeiten kann und somit mit einem Fehler aussteigt. Fix ist auf dem Weg.
            Gruß
            Tobias

            Kommentar


              #7
              Ich habe mir mal angeschaut was da kommt wenn ein Gerät nicht erreichbar ist, im Browser habe ich dann :

              Code:
              <?xml version="1.0" encoding="ISO-8859-1"?>
              <[COLOR=#990000]error[/COLOR] [COLOR=#990000]title[/COLOR]="[COLOR=black][B]Fehler![/B][/COLOR]">
              <[COLOR=#990000]error-type[/COLOR]>APPLIANCE_MISSING[COLOR=blue]</[COLOR=#990000]error-type[/COLOR]>[/COLOR]
              <[COLOR=#990000]error-type[/COLOR]>ACTION_EXECUTE[COLOR=blue]</[COLOR=#990000]error-type[/COLOR]>[/COLOR]
              <[COLOR=#990000]cu-type[/COLOR]>MieleFZ[COLOR=blue]</[COLOR=#990000]cu-type[/COLOR]>[/COLOR]
              <[COLOR=#990000]cu-id[/COLOR]>KFN_8767.102013838:60000[COLOR=blue]</[COLOR=#990000]cu-id[/COLOR]>[/COLOR]<[COLOR=#990000]message[/COLOR]>Gerät vom Typ: MieleFZ mit ID KFN_8767.102013838:60000 fehlt[COLOR=blue]</[COLOR=#990000]message[/COLOR]>[/COLOR] [LEFT][FONT=Verdana]</[COLOR=#990000]error[/COLOR]>[/FONT]
               [/LEFT]


              Openhab macht zB im Log das daraus:
              Code:
              2020-04-16 09:31:55.713 [INFO ] [eclipse.smarthome.model.script.Miele] - statusgesch: Ende
              statuswasch:
              APPLIANCE_MISSING
              ACTION_EXECUTE
              WM_W3889
              WM_W2889.-1609545540
              Gerät vom Typ: WM_W3889 mit ID WM_W2889.-1609545540 fehlt
              statuskoch: Aus
              Das ist die Ausgabe von einem anderen Gerät aber das Prinzip kann man erkennen. In der ersten und letzten Zeile sind die Ausgaben wenn die geräte erreichbar sind. Also "Ende" und "Aus". Hierzu frage ich zB die Zeilen 2 und vier ab, was sich zwischen >…< befindet und lass es in der CV anzeigen. Die Frage wäre nun unabhängig von einem Fix, warum bekomme ich bei einem Fehlenden Gerät alle Zeilen, und lässt sich evtl etwas mit einem Mapping machen? Mein Versuch mit

              Miele.map
              Code:
              APPLIANCE_MISSING=Off
              MieleFZ=Off
              ACTION_EXECUTE=Off
              Gerät_vom_Typ:_MieleFZ_mit_ID_KFN_8767.102013838:6 0000_fehlt=Off
              brachte keinen Erfolg.

              Gruß

              Frank

              Kommentar


                #8
                So kann das auch nicht gehen, wenn dann müsstest Du den ganzen String mappen und nicht nur ein paar Schnipsel daraus und das wird vermutlich ebenso an den Zeilenumbrüchen scheitern.
                Wenn überhaupt, dann müsstest Du das in der XSLT-Datei machen, die die Antworten interpretiert (backstatus.xsl).
                Gruß
                Tobias

                Kommentar


                  #9
                  Ich denke auch, leider. In meiner backstatus.xsl frage ich zB. die dritte Zeile ab und nehme den Inhalt zwischen >...........< . Das letzte Zeichen ist dann der Zeilenumbruch. Soweit ich es verstanden habe geht es dann wohl nicht mehr weiter, heißt daraus zB nur die ersten Buchstaben ohne Zeilenumbruch zu bekommen ist wohl nicht möglich.
                  Also warte ich wohl doch auf einen Fix für CV.

                  Kommentar


                    #10
                    Meine praktischen XSL Kenntnisse sind zwar uralt und waren nie besonders Umfang reich, aber damit wirst Du das Problem auf jeden Fall lösen können. Mit XSL-Dateien kann man XML beliebig zerpflücken. D.h. Du kannst den Text-Inhalt des error-type Elements lesen. Vermutlich würde es wohl reichen, dass da einfach "off" auskommt, sobald ein error-type Element da ist. Aber dazu kenne ich die Struktur der Nachrichten zu wenig.
                    Einen Textumbruch sehe ich in der Datei übrigens nicht, die kommt vermutlich erst dadurch das die XSL-Datei mit dem Inhalt nichts anfangen kann und dann das falsche/gar nichts macht.
                    Gruß
                    Tobias

                    Kommentar


                      #11
                      Geht mir genauso, XSL ist für mich auch etwas schwierig. Ich füge mal meine backstatus.xsl an und frage in die Rund vielleicht findet sich jemand der helfen kann

                      Code:
                      <?xml version="1.0" encoding="utf-8" ?>
                      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                      <xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>
                      <xsl:template match="/device/information">
                      <xsl:value-of select="key[position() = 2]/@value"/>
                      </xsl:template>
                      </xsl:stylesheet>
                      Gruß
                      Frank

                      Kommentar


                        #12
                        Ich denke ein XML-Beispiel von einer korrekten Antwort, also eine bei der die XSL-Datei funktioniert wäre auch noch hilfreich.
                        Gruß
                        Tobias

                        Kommentar


                          #13
                          Probiers mal hiermit:

                          Code:
                          <?xml version="1.0" encoding="utf-8" ?>
                          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                            <xsl:output indent="no" method="text" encoding="UTF-8" omit-xml-declaration="yes"/>
                            <xsl:template match="/device/information">
                              <xsl:value-of select="key[position() = 2]/@value"/>
                            </xsl:template>
                            <xsl:template match="/error">Off</xsl:template>
                          </xsl:stylesheet>
                          Gruß
                          Tobias

                          Kommentar


                            #14
                            Das funktioniert Top, vielen Dank für deine Hilfe.

                            Gruß
                            Frank

                            Kommentar

                            Lädt...
                            X