Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit Stringauswertung in einer Rule

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

    Probleme mit Stringauswertung in einer Rule

    Hallo zusammen,

    ich möchte eine Rückmeldung des Heizungsaktors (String) in einer Rule auswerten:
    Code:
    rule "LED3 ON" //Heizung Gaube
    when Item Diag_Heiz_DG_Gaube changed
    then
        if (Diag_Heiz_DG_Gaube.state.toString()) contains ("1")
            LED3.sendCommand(ON)
    end
    Der Aktor sendet bei Strom auf dem Ausgang für den Stellantrieb den Text "Wi H Komfort 1", sonst "...0":
    # Zeit Dienst Flags Prio Quelladresse Quellname Zieladresse Zielname Rout Typ DPT Info
    648 11.11.2020 13:03:11,148 vom Bus Niedrig 1.1.24 AKH-0400.02 Heizungsaktor 4-fach, 2TE, 24/230 VAC 4/0/10 Diagnose Heizung Gaube 6 GroupValueWrite 16.000 Zeichen (ASCII) 57 69 20 48 20 4B 6F 6D 66 6F 72 74 20 30 | Wi H Komfort 0
    Die Rule sendet aber auch bei "0" das Commando ON.

    Ebenso verhält sich die analog geschriebene "OFF"-Rule. Es werden immer beide Kommandos nacheinander gesendet.

    Openhab zeigt in der UI natürlich nur den String an, dies auch korrekt.

    Was läuft hier falsch?
    Zuletzt geändert von Frame77; 11.11.2020, 13:12.

    #2
    Probiere es mal so:

    Code:
    if (Diag_Heiz_DG_Gaube.state.toString.contains("1"))

    Kommentar


      #3
      Danke, funktioniert. Nur warum... ? Der andere Befehl sollte doch das gleiche Ergebnis bringen?

      Kommentar


        #4
        Nein, wie kommst Du auf die Idee?
        Code:
        if(Diag_Heiz_DG_Gaube.state.toString())
            contains ("1")
        wäre die korrekte Formatierung. Der if-Befehl endet mit der schließenden Klammer. contains() ist also nicht mehr Bestandteil der Bedingung, sondern der ausgeführte Befehl. Da die Bedingung Diag_Heiz_DG_Gaube.state.toString() niemals wahr ist, wird auch die Anweisung contains() niemals ausgeführt (ansonsten gäbe es eine Fehlermeldung, da es gar keinen solchen Befehl gibt).
        Allerdings ist damit die Anweisung LED3.sendCommand(ON) nicht mehr die erste Anweisung nach der if() Anweisung. Sie wird also nicht bedingt ausgeführt, sondern immer.

        Kommentar

        Lädt...
        X