Ankündigung

Einklappen
Keine Ankündigung bisher.

formula mapping

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

    formula mapping

    Ich stehe wohl gerade etwas auf dem Schlauch was das Mapping mit "formula" angeht:
    1. In dem Beispiel: https://www.cometvisu.org/CometVisu/...rmeln-advanced sehe ich nicht wirklich eine Unterschied zwischen den beiden Uhrzeiten (mit/ohne Mapping)
    2. Was macht das && in den Beispielen, z.B.
      Code:
      <formula>y = x &amp;&amp; x.constructor === Date ? x.getHours() + ':' + x.getMinutes() : x;</formula>
      Muss da irgendwas escaped werden, wenn ja was alles?
    3. Irgendwo stand in formula kann natives Javascript benutzt werden. Leider scheitere ich an einem regex-match. Die Fehlermeldung sieht mir so aus, als wenn x undefined ist, z.B.
      Code:
      <formula>y = x.match(/Den ganzen Tag lang ([^.]+)\./)</formula>
      resultiert in "TypeError: x.match is not a function" und
      Code:
      <formula>y = String(x).match(/Den ganzen Tag lang ([^.]+)\./)</formula>
      bringt: "TypeError: Cannot read property 'cloneNode' of null"

    #2
    Es scheint nicht an regex/match zu liegen, mit substr bekomme ich ebenfalls den "is not a function" error.
    Komischerweise sehe ich das richtige Ergebnis der Regex und Substr Funktionen in der Visu. Nur die fette rote Fehlermeldung stört etwas ;-)

    Kommentar


      #3
      Die Formel ist normales JavaScript. Aber das muss ist der XML Datei so eingetragen werden, dass es korrekt beim JavaScript ankommt. Bei einem "&" würde somit das XML das Zeichen "schlucken", so dass es als "&amp;" escaped werden muss. Genau so würde ich das "<" als "&lt;" und das ">" als "&gt;" escapen.

      Das "x" ist das, was über den Datentyp aus dem Bus-Wert erzeugt wird.
      Meist also eine Zahl, könnte aber auch ein String sein oder wie im Beispiel ein Date - was auch zeigt, warum hier als erstes der Datentyp gecheckt wird um Fehler umgehen zu können.
      TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

      Kommentar


        #4
        Was mich irritiert ist, dass alleine durch *Prüfung* des Datentyps etwas funktioniert, was vorher nicht funktioniert hat.
        Zur Veranschaulichung:
        Code:
        <formula>var regexp = RegExp('Den ganzen Tag lang ([^.]+)\.');
           y = regexp.exec(x)[1];
        </formula>
        Bringt o.g. error (aber das Ergebnis wird in der CV korrekt angezeigt!)
        Code:
        <formula>var regexp = RegExp('Den ganzen Tag lang ([^.]+)\.'); 
            if (x.constructor === String) y = regexp.exec(x)[1];
        </formula>
        funktioniert ohne error.

        Ist das normales/beabsichtigtes Verhalten seitens Javascript oder eine Besonderheit im CV Kontext?

        Kommentar


          #5
          Ich müsste mir hier den Code nochmal genauer ansehen.
          Aber wenn die CV gestartet wird gibt es noch keine Werte. Die werden erst nach dem initialen Read (oder gar erst nach dem ersten empfangenen Telegramm, wenn es keine Read-Möglichkeit gibt und der Cache leer ist) mit einem Wert befüllt.
          Daher könnte es sein (wie geschrieben, habe nicht in den aktuellen Code geschaut), dass die Formel zuerst auch mit einem unknown o.ä. (wie eben dem null) aufgerufen wird.
          TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

          Kommentar

          Lädt...
          X