Ankündigung

Einklappen
Keine Ankündigung bisher.

LINKNX - Stringvergleich Type 28.001

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

    KNX/EIB LINKNX - Stringvergleich Type 28.001

    Hi,
    ich möchte eine LED anschalten, wenn ein String in einer Variable vorhanden ist und logischerweise die LED abschalten, wenn der String wieder leer ist.

    Note_Text ist ein 28.001

    Ich leere den String mit folgender rule, wenn ein Taster gedrückt wird:
    <rule id="Note_clear_go">.
    <condition type="object" id="Note_clear" trigger="true" value="on" />
    <actionlist>
    <action type="set-value" id="Note_Text" value="" />
    <action type="set-value" id="Note_clear" value="off" />
    </actionlist>
    </rule>

    Mit folgender rule überprüfe ich den Status des Strings und setzte die LED:
    <rule id="Note_vorhanden_go">.
    <condition type="object" id="Note_Text" trigger="true" value="" />.
    <actionlist type="if-true">
    <action type="set-value" id="Note_vorhanden" value="off" />
    </actionlist>
    <actionlist type="if-false">
    <action type="set-value" id="Note_vorhanden" value="on" />
    </actionlist>
    </rule>.

    Das funktioniert leider nicht, da er immer (laut linknx-Log) - auch wenn ich den String zuweise (und da ist auch ein String drin.)

    INFO Condition : ObjectCondition (id='Note_Text') evaluated as '1'
    INFO Rule : Rule Note_vorhanden_go evaluated as 1, prev value was 1

    und somit den String immer für leer hält - der ist aber nicht leer.

    Hat jemand eine Idee??

    #2
    Zitat von knxrdg Beitrag anzeigen
    Hat jemand eine Idee??
    Mit dem Object Type 28.001 habe ich bisher nicht gearbeitet, kann also nur Vermutungen anstellen. Was wäre, wenn value="" für den Typ ganz anders zu interpretieren wäre, nämlich "Ist der String vorhanden" und das sogar für den leeren String gelten würde (ist ja eigentlich ein Objekt mit dem Hexwert x0). Dann wäre nämlich die Bedingung immer erfüllt, wenn das Object Note_Text irgendeinen Wert inklusive den Leerstring enthält.

    Probier den Vergleich mal mit einer Ungleichung z.B. mit: value=" " op="lt"
    in der Bedeutung String kleiner als der Text " " (Leerzeichen), weil das Leerzeichen im ASCII Code den kleinsten Textwert darstellt.

    Vielleicht kommst du damit weiter.

    Gruss, Othmar
    EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

    Kommentar


      #3
      Hi,
      ich habe es so gemacht.

      Es funktioniert!

      perfekt - und vielen Dank

      Hier der geänderte funktionierende Code für andere:

      <rule id="Note_vorhanden_go">
      <condition type="object" id="Note_Text" trigger="true" value=" " op="lt" />
      <actionlist type="if-true">
      <action type="set-value" id="Note_vorhanden" value="off" />
      </actionlist>
      <actionlist type="if-false">
      <action type="set-value" id="Note_vorhanden" value="on" />
      </actionlist>
      </rule>

      Kommentar

      Lädt...
      X