Ankündigung

Einklappen
Keine Ankündigung bisher.

mapping mit wildcard

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

    mapping mit wildcard

    Hallo,
    kann das Mapping auch mit Wildcards oder Regex gemacht werden?
    Ich stelle mir sowas vor:
    Code:
          <mapping name="FAIL">
            <entry value="NULL">Fehler</entry>
            <entry value="*">OK</entry>
          </mapping>
    NULL soll den undefinierten Status eines openhab items darstellen (vielleicht muss es in cometvisu auch anders heißen, undef oder undefined?) und * soll den Rest darstellen. Also, solange das item einen Wert hat ist das Mapping OK, wenn das item nicht definiert ist, wird es als Fehler dargestellt.

    Wäre abolut prima, wenn das irgendwie funktionieren würde.

    Viele Grüße
    Michael

    #2
    Nicht mit dem aktuellen Code, grundsätzlich wäre das aber denkbar. Ein Issue hast Du ja schon aufgemacht
    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


      #3
      Danke für die Rückmeldung. Dann hoffe ich auf einen Entwickler, der dieses Feature als sinnvoll erachtet ;-)

      Kommentar


        #4
        Hat vielleicht irgendwer einen Tipp, wie ich Alarme in CometVisu darstellen kann. In openHAB werden (Sensoren) Items UNDEF, wenn sie sich länger nicht mehr melden. Ansonsten haben diese Sensoren irgendwelche numerischen Werte. Also die Item nehmen praktische im Fehlerfall den Zustand UNDEF an und mit Normalzustand liegen Werte an.
        Gibt es da einen Trick, wie ich mit Mapping ein OK oder nicht OK hinzaubern kann?

        Kommentar


          #5
          Das müsste doch mit einer Formel hinzubekommen sein, siehe: http://cometvisu.org/CometVisu/de/la...eln-einsteiger
          Gruß
          Tobias

          Kommentar


            #6
            peuter
            Meinst Du sowas, wie
            Code:
            <mapping name="TrueFalse">
                <formula>y = x &amp;&amp; x.constructor === Integer ? "OK" : "not OK";</formula>
            </mapping>
            (Hab das aus der CV Doku nur kopiert aus dem Bauch angepasst) ... soll bedeuten, wenn der x.constructor ein Integer ist, dann setze "OK", ansonsten "not OK".
            Da ich des JavaScript nicht mächtig bin ... soll ich in diese Richtung weiter recherchieren oder bin ich da auf dem Holzweg?

            Danke schon mal für Deinen Tipp :-)

            Viele Grüße
            Michael

            Kommentar


              #7
              Ja irgendwie sowas, vielleicht reicht schon ein
              Code:
              parseInt(x) > 0
              Gruß
              Tobias

              Kommentar


                #8
                peuter
                Sorry, wenn ich Dich weiter belästige ... ich habe einiges ausprobiert, aber komme nicht weiter :-(
                Mein Wert x ist eine Zahl größer 0, in der Regel zwischen 0.5 und 0.6. Mit folgender Formel
                Code:
                    <mapping name="Alarm">
                        <formula>y = x &amp;&amp; x.constructor === (parseFloat(x) > 0) ? "OK" : "nOK";</formula>
                    </mapping>
                bekomme ich als Ergebnis jedoch immer 0, obwohl ja 1 zurückgegeben werden müsste. Also fürchte ich, dass irgendwas mit meiner Syntax nicht passt. Soweit ich mich dazu eingelesen habe interpretiere ich meinen Code:
                konstruiere ein Objekt x, welches identisch in Typ und Wert ist, wie das Ergebnis aus dem Conditional Operator (parseFloat(x) > 0) ? "OK" : "nOK". Nachdem parseFloat(x) definitv größer 0 ist, sollte die Bedingung auf 1 fallen. Egal welche Bedingung ich aber verwende, es kommt immer die 0. Eine Bedingung wie
                Code:
                (parseInt("0") == 0) ? 1 : 0
                - die definitv wahr sein sollte - liefert eine 0.
                Da ist doch irgendwo der Wurm drin, ich finde ihn aber nicht :-(

                Kommentar


                  #9
                  Vergiss man den ganzen constructor Kram in Deinem Beispiel. Nimm einfach simplen Javascript Code:

                  Code:
                   
                   <mapping name="formula">  <formula>y = parseFloat(x) > 0 ? "OK" : "nOK"</formula> </mapping>
                  Gruß
                  Tobias

                  Kommentar


                    #10
                    So jetzt hab ich's:
                    Code:
                        <mapping name="Alarm">
                            <formula>y = !isNaN(parseFloat(x));</formula>
                        </mapping>
                    Wenn der x eine Zahl (number) ist, dann liefer true, ansonsten false. Hab mal wieder zu umständlich gedacht ... ;-)

                    Kommentar

                    Lädt...
                    X